CMake add_definitions的作用域不在当前目录中

CMake add_definitions not scoped to current directory

本文关键字:当前目录 作用域 add definitions CMake      更新时间:2023-10-16

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.

的CMakeLists.txt所在的目录