CMake add_definitions的作用域不在当前目录中
CMake add_definitions not scoped to current directory
add_definitions
的文档指出:
在编译器命令行中为当前目录和下的源添加定义
但当我使用它时——无论我把它放在哪里——定义都会添加到整个项目的每个目标中,并提示进行全面重建。在我感兴趣的目标的CMakeLists.txt中添加:
if (MY_OPTION)
add_definitions(-DMY_DEFINITION)
endif()
-DMY_DEFINITION
显示在整个项目中每个目标的ninja.build文件中。我试过在文件夹层次结构中上下移动这段代码,但没有成功。如果这有区别的话,我仍然使用CMake 2.8.12,但那里的文档是一样的。我是在某种程度上滥用了这一点,还是这是故意的行为?
编辑:关于项目结构的一些细节,以回应@Tsyvarev的问题:
3rdParty/
Dep1/
CMakeLists.txt
...
CustomDep1/
CMakeLists.txt
MyProject/
Project.cmake
CMakeLists.txt
MyTarget1/
CMakeLists.txt
在Project.cmake中指定了该选项。只有MyTarget1需要定义。我已经尝试将add_dependencies
放在MyProject/CMakeLists.txt和MyTarget1/CMakeLists.txt中。它传播到第三方、CustomDep1等中的所有内容。
请参阅本文并使用COMPILE_DEFINITIONS
对目标或特定源进行微调。
此外,add_definitions
在当前目录及以下目录中工作,当前目录是一个包含Project.cmake.
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- C2386:"void_t":当前作用域中已存在具有此名称的符号
- CMake add_definitions的作用域不在当前目录中
- "Using"仅在当前类上具有作用域的声明?
- 当const-referencelifetime是当前作用域的长度时,为什么要使用constnon-reference
- 成员不能在当前作用域中定义
- CMAKE:在函数中创建和构建一个列表——使用目录或全局作用域
- 如果存在,则使用它/检测C++中当前作用域的调用约定(thiscall vs cdecl)