CMake add_definitions没有作用于当前目录

时间:2016-03-31 13:21:15

标签: c++ cmake

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等中的所有内容

1 个答案:

答案 0 :(得分:2)

请参阅this post并使用COMPILE_DEFINITIONS微调目标或特定来源。

同样add_definitions在当前目录和下面工作,当前目录是一个位于CMakeLists.txt的目录,其中包含Project.cmake。