如何在GNU Makefile中只获取没有扩展名的文件名?

时间:2015-07-27 07:57:51

标签: c++ makefile

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

我倾向于认为没有C ++ 11标准方式(但您可能有GCCClang具体方式)来做到这一点。当然,您可以使用__FILE__ predefined standard macro

您可以采用让您的头文件foo.hinclude guard)做

的惯例
 #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 ...顺便说一句,上面的架构不适用于嵌套标题。