在源码中有时候需要用到文件名,比如log的时候一般都会把文件名打印出来,__FILE__这个宏就是干这事用的。但是这个宏会把路径也带进来,而有时候我们只需要一个简单的文件名而已。
实现方法,通过shell或者Makefile自带的函数,去掉文件的路径,用宏的方式传递进去即可。
Makefile:
%.o:%.c
gcc -o $@ -c $< -D__NOTDIR_FILE__=$(notdir $<)
'-D__NOTDIR_FILE__=`basename $SOURCE`',
然后头文件加这么一段:
#ifdef __NOTDIR_FILE__
#define M2STR(x) #x
#define M2STR_IMPL(x) M2STR(x)
#define __BFILE__ M2STR_IMPL(__NOTDIR_FILE__)
#else
#define __BFILE__ __FILE__
#endif
这样__BFILE__就是不包含路径的文件名了。