cmake include_directories 顺序之后/之前

2023-12-01

我在源树中有一个文件,其名称为“time.h”,与系统“time.h”完全相同。这是无法改变的。我在使用 cmake 时遇到了一个问题,当我使用 include_library 选项时,它会被转换为 -I 标志,这意味着我的自定义“time.h”优先于系统 time.h,即使对于 包含也是如此。这是明确的禁忌。

我尝试使用 include_directories (AFTER dir1 dir2) 但它仍然生成 -I 选项而不是预期的 -idirafter。


我不认为这是 CMake 的问题;我相信 gcc 总是会在系统之前找到你的“time.h”,无论你在中使用引号还是括号#include并且无论其中的各种选项如何include_directories。请参阅条目-I and -isystem in the 海湾合作委员会文档

The AFTERCMake 的选项include_directories仅与 gcc 命令中列出的目录顺序相关,与 gcc 无关-idirafter flag.

让您自己的文件与系统文件同名并不是一个好计划,但如果您束手无策,您可以通过更全面地限定您自己的包含路径来避免此问题,而无需重命名 time.h ,因此而不是例如

CMakeLists.txt:  include_directories(${PROJECT_SOURCE_DIR}/src)

header file:     #include <time.h>  // we want but don't get system one
                 #include "time.h"  // we want and get own custom one

更像是

CMakeLists.txt:  include_directories(${PROJECT_SOURCE_DIR})

header file:     #include <time.h>      // we want and get system one
                 #include "src/time.h"  // we want and get own custom one


另一种选择是坚持当前的#include设置(使用系统 time.h 的尖括号和您自己的引号)而不是使用include_directories全部在 CMakeLists.txt 中。相反,我认为你可以用类似的东西替换它:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -iquote ${PROJECT_SOURCE_DIR}/src")

Using -iquote可能是一个更好的选择-idirafter由于指定的目录-idirafter被(在这种情况下错误地)视为系统目录,因此抑制了警告等。

如果您确实选择此选择,可能值得对 CMakeLists.txt 进行评论以解释为什么没有include_directories以避免将来的重构恢复到使用更正常的状态include_directories命令。

总而言之,如果可能的话,最好的选择是重命名“time.h”文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmake include_directories 顺序之后/之前 的相关文章

随机推荐

  • 如何通过匹配 BeautifulSoup 中元素属性中的文本来获取元素

    我有这个代码 a title Next Page Results 1 to 60 href class smallfont gt a 我想抓住a元素并获取 href 我怎样才能匹配title属性与Next Page 我想部分匹配标题属性中的
  • 限制 Git 分支访问的方法?

    我的 git 存储库中有四个分支 使用 GitHub 进行管理 生产 Staging Master 人名 发展 有没有办法限制对单个分支 人名 开发 的写访问 我该怎么做 类似问题 供参考 如何编写 git hook 来限制写入分支 使用
  • 哪个 Django 表单字段可以为我提供 的 HTML 输出?

    我有一个带有此输入的 html 表单
  • 开发模式下的GWT + JSTL——可能吗?

    我有一个 GWT 应用程序 由 roo 生成 我决定使用 Spring Security 来保护它 Roo 生成一个 login jspx 页面作为安全设置的一部分 并且此 jspx 使用一些基本的 JSTL 标记库 当在开发模式下运行时
  • 包含标头时防止出现多个 #define

    来自 python 我对正确的方法有点困惑 我正在尝试将该库包含在我的项目中 https github com nothings stb blob master stb image h 为此 我必须在导入文件之前 define STB IM
  • 如何在 JPA2 中强制使用 @ManyToOne 字段?

    我正在为应用程序设计持久性存储库 我是新来的休眠 JPA2我遇到了麻烦创造更复杂的关系在这种情况下外部强制键 一个例子 只是在记事本上写的 所以不完全是这样 我有一个名为 Person 的顶级类 它可以担任多个职位 另一个类 如果我像这样映
  • 低延迟地从 IP 摄像机获取帧

    我当前正在使用此命令从 RTSP 流获取帧并从标准输出读取帧 ffmpeg nostdin rtsp transport tcp i
  • 如何仅在图像悬停时显示 fancybox 标题

    我正在使用Fancybox插件对于图像库 我想仅当用户将鼠标悬停在图像上时显示图像标题 我不知道要修改代码的哪一部分才能完成此任务 我尝试通过添加来编辑 CSSa hover声明如下 fancybox title over wrap 我什至
  • 将日期对象转换为日历对象[重复]

    这个问题在这里已经有答案了 因此 我从传入对象中获取以下形式的日期属性 Tue May 24 05 05 16 EDT 2011 我正在编写一个简单的辅助方法将其转换为日历方法 我使用以下代码 public static Calendar
  • MySQL Inner Join 有限制吗?

    我有这个查询来收集有关单个订单的信息 它变得非常复杂 我没有任何数据可以测试 所以我问 如果有人在小型和大型数据集中有这方面的经验 那么您可以或应该在单个查询中进行多少个连接是否有限制 将大型查询分成较小的部分是否明智 或者这不会产生重大影
  • 在 Delphi 线程中使用 CoInitialize

    我在 Delphi 程序的线程内使用 TIdHttp 和 TXMLDocument 现在我想知道 这些类是否使用 COM 对象 因此我需要在此线程中调用 CoInitialize 和 CoUninitialize 如果是 我是否必须在执行方
  • Clearcase 问题 [已关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我负责我项目中的clearcase 我没有太多经验 我的问题是 现在我们在 cc 中的项目结构是一个包含 PROD PV ST DV 流的项目 如下所示 链接到屏幕截图 现在 如您所见 我
  • ECMAScript 6 和 ECMAScript Harmony 之间有什么区别?

    我有一段时间认为它们是同一件事 但我经常在博客或答案中看到措辞似乎暗示两者之间存在差异 即使 SO 有两个不同的标签 但它们的描述没有显示出任何明显的区别 我四处搜索了一下 这只增加了混乱 因为似乎我不是唯一一个不确定什么意思的人 这两个术
  • 异步和递归目录扫描,用于 Nodejs 和 Expressjs 中的文件列表

    In this 快递我正在尝试 递归地 获取路由文件中的所有 JSON 文件 data目录 其实我可以控制台日志您可以在其中看到的文件A Mark 但是一旦异步内容完成 我找不到将整组路径发送到视图的方法 一些帮助将非常感激 这是数据 da
  • 有没有办法使用正则表达式来获取第一个单词并替换引用的部分?

    我正在尝试更换相思船 只是复制内容时的占位符 第一个单词 即变量名 SCAFFOLDING new ItemBuilder Material valueOf ACACIA BOAT build SEAGRASS new ItemBuilde
  • 如何向 Winform C# 程序发送 2-3 个参数?

    如何向 Winform C 程序发送 2 3 个参数 例如 我会发送类似的东西MyProg exe 10 20 abc 在我的程序中我可以收到这些值 我不想显示 MyProg exe 它会在后台工作 提前致谢 打开你的Program cs这
  • freemarker 中的数字格式问题 - 在小数后进行舍入

    我正在使用 Freemarker 模板 我有一个十进制值 a 23 65 我只想检索以上值 a 23 6 lt Extract first number after decimal point gt 我使用过 number format e
  • 如何使用 PHP 获取 WAP 中的 MSISDN 号码?

    我开发了一个 WAP 应用程序 我想获取访问我的网站的用户的 MSISDN 我的运营商已将我的 WAP 应用程序列入白名单 我在几部三星手机上成功获得了 MSISDN 但在诺基亚 黑莓和 iPhone 设备上却没有获得相同的结果 请建议我获
  • 在 main() 之外调用函数[重复]

    这个问题在这里已经有答案了 我正在尝试这样做 include
  • cmake include_directories 顺序之后/之前

    我在源树中有一个文件 其名称为 time h 与系统 time h 完全相同 这是无法改变的 我在使用 cmake 时遇到了一个问题 当我使用 include library 选项时 它会被转换为 I 标志 这意味着我的自定义 time h