如何在子项目中忽略 CMake 编译器定义

Posted

技术标签:

【中文标题】如何在子项目中忽略 CMake 编译器定义【英文标题】:How to ignore CMake Compiler Definitions in sub projects 【发布时间】:2018-05-02 21:07:08 【问题描述】:

我有一个包含多个第三方库的主项目。我刚刚添加了一个新的第 3 方项目。我面临的问题是新项目在主项目编译器定义传递给它时中断。

如何避免将这些定义传递给第 3 方项目? 另外,如果 3rd 方项目是独立编译的,它只需要两个包含目录。但是当与主项目一起编译时,会有许多额外的目录传递给它。

我已经尝试寻找 set_definition() 但我没有看到任何有用的信息。 任何指向示例或文章的链接都会很好。也可能是我没有寻找正确的解决方案。 谢谢

【问题讨论】:

target_compile_definitions 【参考方案1】:

使用全局“add_definition”是旧方法。目前,每个target、文件夹、源文件等定义编译器标志、定义等可能要好得多(在你的情况下是COMPILE_DEFINITIONS?)

只需在谷歌上搜索“现代 CMake”,您就会发现会议中的幻灯片和视频如何使用现代 CMake。

【讨论】:

以上是关于如何在子项目中忽略 CMake 编译器定义的主要内容,如果未能解决你的问题,请参考以下文章

CMake:使用自定义工具输出生成标头

如何让VS2017忽略特定编译器的关键字?

如何从 CMake 或 make 输出编译依赖项?

在 CMake 项目中使用 protobuf

cmake - 如何根据谁使用它来定义目标库的符号

使用 CMake 使用 Network 构建 Qt 项目会导致未定义的引用