|
一、在C++中宏__FILE__是编译系统自带的宏
在win上编译,默认__FILE__是带路径的。
在linux上编译,默认__FILE__是不带路径的,只有文件名。
二、使用cmake管理工程并编译
__FILE__宏,无论是在win还是在linux上使用cmake编译时都带有路径。
三、解析
带路径和不带路径究其原理是跟编译命令相关的。跟是哪个编译器其实是不相关的。
比如:编译时你使用的是绝对路径文件名,则__FILE__就是带路径的。比如:g++ /home/linuxbrew/zyao/tmp/main.cpp -o app
此时__FILE__就是/home/linuxbrew/zyao/tmp/main.cpp
如果编译时你使用的文件名是相对路径,则__FILE__就不带路径。比如:g++ main.cpp -o app
此时__FILE__就是main.cpp
四、如果不想加路径,比如打日志时路径不必要,可以采用以下方法
#ifdef _WIN32
#define FILE_NAME(x) strrchr(x,'\\')?strrchr(x,'\\')+1:x //日志中的文件名去除路径信息,只输出文件名
#else
#define FILE_NAME(x) strrchr(x,'/')?strrchr(x,'/')+1:x //由于cmake工程中__FILE__也带有路径,所以用此宏去除路径
#endif
|
|