CMake政策的范围是什么?

时间:2015-03-18 13:31:03

标签: cmake

我有一个包含多个子目录的CMake项目,比如这个:

dir1
    subdir11
    subdir12
dir2
    subdir21
    subdir22

Root CMakeLists.txt:

add_subdirectory(dir1)
add_subdirectory(dir2)

dir1和dir2中的CMakeLists相似:

add_subdirectory(subdir11)
add_subdirectory(subdir12)

add_subdirectory(subdir21)
add_subdirectory(subdir22)

子目录中的CMakeLists做实际工作。

文件dir1/subdir12/CMakeLists.txtCMP0046政策设为OLD

cmake_policy(SET CMP0046 OLD) #silently ignore missing dependencies

我的问题是 - CMP0046的此设置会传播到subdir21subdir22吗?

2 个答案:

答案 0 :(得分:4)

没有。这个问题最好直接from the documentation ...

回答
  

策略设置使用堆栈确定范围。堆栈的新级别是   进入项目的新子目录时推送(带   add_subdirectory)并在离开时弹出。因此设置一个   项目的一个目录中的策略不会影响父项或兄弟项   目录但会影响子目录。

要对特定级别进行临时更改(不包括sub_directories),可以使用

cmake_policy(PUSH)
cmake_policy(POP)

如果您希望在subdir21和subdir22中应用该策略,您需要明确地将其添加到那里,或者考虑将其添加到公共父级。

答案 1 :(得分:3)

针对此答案的评论SigningMethodECDSA.Sign docs

可以通过set(CMAKE_POLICY_DEFAULT_CMP0046 OLD)

全局设置策略