请选择 进入手机版 | 继续访问电脑版

赵耀的知识库

 找回密码
 立即注册
搜索
热搜: 报盘 状态 失败
查看: 8466|回复: 0

__FILE__在win和linux中带路径和不带路径,cmake

[复制链接]

416

主题

423

帖子

2567

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2567
发表于 2021-10-19 11:22:41 | 显示全部楼层 |阅读模式
一、在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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则