如何在GNU Makefile中只获取文件名而不扩展名

How to get only file name without extension in GNU Makefile?

本文关键字:文件名 获取 扩展名 GNU Makefile      更新时间:2023-10-16

我从其他帖子中得到了这个答案。下面打印带有扩展名的文件名。这只适用于cpp文件,而不适用于在C代码中检索这个预处理器值FILE_NAME的头文件。

-D FILE_NAME="$(<F)"

如何获得只有源文件名没有扩展名?

预定义的函数basename从文件名中删除后缀(扩展名),因此,如果$(<F)是您感兴趣的文件名,那么$(basename $(<F))是没有扩展名的名称:

-D FILE_NAME="$(basename $(<F))"

我倾向于认为没有c++ 11的标准方法(但您可能有GCC或Clang特定的方法)来做到这一点。当然,您可以使用__FILE__预定义的标准宏。

你可以采用一个约定,让你的头文件foo.h(带include保护)做

 #ifndef FOO_INCLUDED
 #define FOO_INCLUDED
 #define MY_HEADER_BASE_NAME FOO
 /// rest of header goes here
 #undef MY_HEADER_BASE_NAME
 #undef /* FOO_INCLUDED*/

然后使用MY_HEADER_BASE_NAME…顺便说一句,上面的模式不能很好地使用嵌套的头。