我从其他帖子中得到了这个答案。下面打印带扩展名的文件名。这仅适用于cpp文件,而不适用于在C代码中检索此预处理器值FILE_NAME
时的头文件。
-D FILE_NAME=\"$(<F)\"
如何只获取没有扩展名的源文件名?
答案 0 :(得分:3)
预定义函数basename
从文件名中删除后缀(扩展名),因此如果$(<F)
是您感兴趣的文件名,则$(basename $(<F))
是没有扩展名的名称:
-D FILE_NAME=\"$(basename $(<F))\"
答案 1 :(得分:0)
我倾向于认为没有C ++ 11标准方式(但您可能有GCC或Clang具体方式)来做到这一点。当然,您可以使用__FILE__
predefined standard macro。
您可以采用让您的头文件foo.h
(include 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
...顺便说一句,上面的架构不适用于嵌套标题。