带有工具链文件和 cmake_policy 的 CMAKE

Sté*_*ane 3 cmake vcpkg

我遇到了先有鸡还是先有蛋的情况。我正在使用 vcpkg,这需要我从命令行设置 cmake 工具链文件。但我还有一些cmake_policy语句需要在工具链文件之前在 CMakeLists.txt 中设置。

以下是 cmake 的调用方式:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux ..
Run Code Online (Sandbox Code Playgroud)

但该项目使用了一些包,需要立即执行以下两个策略CMAKE_MINIMUM_REQUIRED

CMAKE_POLICY ( SET CMP0003 NEW ) # libs linked via full path
CMAKE_POLICY ( SET CMP0011 NEW ) # push/pop instead of no_policy_scope
Run Code Online (Sandbox Code Playgroud)

我的问题: 有没有办法从内部指定工具链CMakeLists.txt——大概是在设置两个 cmake 策略之后立即指定——而不是在命令行?

我收到的我想解决的警告是:

CMake Warning (dev) at vcpkg/scripts/buildsystems/vcpkg.cmake:221 (_add_executable):
  Policy CMP0003 should be set before this line.  Add code such as
    if(COMMAND cmake_policy)
      cmake_policy(SET CMP0003 NEW)
    endif(COMMAND cmake_policy)
Run Code Online (Sandbox Code Playgroud)

小智 7

您还应该能够从命令行设置策略:

cmake -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_POLICY_DEFAULT_CMP0003=NEW \
      -DCMAKE_POLICY_DEFAULT_CMP0011=NEW \
      -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake \
      -DVCPKG_TARGET_TRIPLET=x64-linux \
      ..
Run Code Online (Sandbox Code Playgroud)

请参阅如何在使用ExternalProject_Add添加的外部项目上设置CMake策略和属性