cmake系列 - 解决__FILE__ 宏绝对路径的问题(相对路径)

问题表现

通过cmake编译的代码,在代码中输出__FILE__就代码文件的绝对路径。在大多数使用__FILE__这宏的,一般都是用于日志输出,首先使用绝对路径会使日志量膨胀,其次我们最终的程序执行的环境,可能与编译的环境不一样,输出绝对路径并没有多大的参考意义

解决思路

既然__FILE__宏是gcc定义的,默认等于gcc命令中的文件路径,我们可以通过重新定义该宏来达到我们的目的,如下方式:
为了让输出更有区分度,我在这里强行改成sylar/test.cc, 在程序执行的时候,输出了我们预期的结果,说明这种做法是可行的

在cmake中优雅的解决

如果需要在每个源文件的编译上面都带上对应的定义(-D__FILE__=""sylar/test.cc""),那么CMakeLists.txt里面就比较混乱了。我们可以把这种定义,封装到一个cmake函数里面,当需要使用这个功能的时候,就执行一下这个函数,这样就可以优雅的解决__FILE__绝对路径的问题,将绝对路径变成相对路径
我们将上面的代码,写入到utils.cmake文件里面,然后去修改我们的CMakeLists.txt,让我们的代码支持__FILE__输出相对路径
redefine_file_macro(test), 为我们的输出目标添加__FILE__宏重定义功能当我们冲定义了__FILE__宏,编译器会告警 ":0:0: warning: "__FILE__" redefined [-Wbuiltin-macro-redefined]

new file 的路径问题_cmake系列 - 解决__FILE__ 宏绝对路径的问题(相对路径)相关推荐

  1. 为 NuGet 指定检测的 MSBuild 路径或版本,解决 MSBuild auto-detection: using msbuild version 自动查找路径不合适的问题

    使用 nuget restore 命令还原项目的 NuGet 包的时候,NuGet 会尝试自动检测计算机上已经安装的 MSBuild.不过,如果你同时安装了 Visual Studio 2017 和 ...

  2. 计算机无法访问指定设备路径或文件怎么回事,电脑提示Windows无法访问指定设备路径或文件如何解决?...

    最近很多用户在反映,在使用电脑的过程中,弹出Windows无法访问指定设备路径或文件,您可能没有合适的权限访问这个项目的错误窗口,这是怎么回事呢?其实这是因为你的系统盘采用ntfs分区格式,并且没有设 ...

  3. Python 相对路径问题:“No such file or directory“,原因及解决方法

    如果你取相对路径不是在主文件里,可能就会有相对路径问题:"No such file or directory". 因为 python 的相对路径,相对的都是主文件. 如下目录结构: ...

  4. Error opening zip file or JAR manifest missing的解决方法

    错误描述: MyEclipse中启动Tomcat(debug)的时候就出现Error starting Tomcat : A configuration error occured during st ...

  5. windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题

    之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...

  6. XXXX is not in the sudoers file. This incident will be reported解决方法

    假设你用的是Red Hat系列(包括Fedora和CentOS)的Linux系统.当你执行sudo命令时可能会提示"某某用户 is not in the sudoers file.  Thi ...

  7. 电脑为什么不能运行php文件路径,window_windows系统下英雄联盟不能启动 指定路径不存在的解决办法,小编把英雄联盟从别人电脑里 - phpStudy...

    windows系统下英雄联盟不能启动 指定路径不存在的解决办法 小编把英雄联盟从别人电脑里拉到电脑里,发现无法启动,在文件里尝试点击了几个可能是启动文件的应用程序,程序能运行但不是联盟的启动程序,后来 ...

  8. mysql pid not found,mysql 启动错误-server PID file could not be found 的解决办法

    centos下 [root@centos var]# service mysqld stopMySQL manager or server PID file could not be found! [ ...

  9. XXXX is not in the sudoers file. This incident will be reported解决方法

    XXXX is not in the sudoers file.  This incident will be reported解决方法 假设你用的是Red Hat系列(包括Fedora和CentOS ...

最新文章

  1. java笔记:自己动手写javaEE
  2. SAP 建立WebService
  3. Xshell怎么把界面信息(终端信息)输出到log(打印到文本文件)
  4. 好的Java编程习惯
  5. INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系
  6. 使用NSKeyedArchiver归档
  7. matlab 读取excel一列,读取excel中的数据把第一列相同的所有行数据输出成一个excel...
  8. java+random+oracle,oracle随机数 — dbms_random
  9. Canvas -画图 关键字
  10. Eclpise 和 MyEclipse 的区别
  11. golang 数组组合成最小的整数_Redis之整数集合底层实现
  12. 防火墙配置文件iptables详解
  13. 【渝粤教育】国家开放大学2018年秋季 2720T实用管理基础 参考试题
  14. 黑php的称呼,“黑”起母校都是把好手!这些高校别称你绝对想不到
  15. win10c盘扩容_三招给你的C盘瘦身
  16. R语言---ggplot图片边缘空白设置和ggplot映射的shape值多余6个
  17. IOS pushVIewController失败
  18. 最全遥感样本数据集分享:场景识别数据集
  19. 【技能教学】如何通过FFMPEG编码推RTSP视频直播流到EasyDarwin开源平台时叠加时间水印?
  20. PyTorch:Bi-LSTM的文本生成

热门文章

  1. Django实战1-权限管理功能实现-10:用户管理
  2. bzoj 2627: JZPKIL [伯努利数 Pollard-rho]
  3. liunx 下压缩解压zip文件
  4. 控股天弘基金 阿里无银行之名行银行之实
  5. Handbook of Constraints Programming——Chapter4 Backtracking Search Algorithms-Preliminaries
  6. vi/vim 键盘图
  7. 在Linux下巧下载
  8. yum提示“Cannot retrieve metalink for repository: epel/x86_64” 解决方法
  9. 华为交换机实操系列(资源)
  10. 查看编译class文件时,使用的JDK版本(只能查看到大版本)