add_definitions
documentation表示:
为当前目录及以下
中的源添加定义到编译器命令行
但是当我使用它时 - 我把它放在哪里并不重要 - 定义会被添加到整个项目中的每个目标并提示完全重建。在感兴趣的目标的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中。它传播到3rdParty,CustomDep1等中的所有内容
答案 0 :(得分:2)
请参阅this post并使用COMPILE_DEFINITIONS
微调目标或特定来源。
同样add_definitions
在当前目录和下面工作,当前目录是一个位于CMakeLists.txt的目录,其中包含Project.cmake。