1

改写的问题

如何控制 CMake 使用 FindXXX.cmake 模块的顺序?

我的确切问题

比如OpenSceneGraph自带的FindZLIB,不如Cmake自带的FindZLIB。OSG自带的FindZLIB模块找不到我安装的ZLIB。我在 CMAKE_INSTALL_PREFIX 路径中安装了 ZLIB。

在构建期间,cmake 会警告我这一点。

OSG 将模块路径设置为它自己的目录,因此 FindPNG(来自 CMake)不正确地使用了 FindZLIB OpenSceneGraph 附带的。因此,它无法找到 ZLIB。

我怎样才能防止这种情况发生?我正在通过调用 ExternalProject_Add 来构建 OpenSceneGraph。我已经阅读了设置 cmake 策略(准确地说是 CMP0017)可能会解决它吗?我不知道如何通过 ExternalProject_Add 做到这一点。

更多细节

这是当 cmake(从生成的 Visual Studio 解决方案调用)尝试配置和构建 OSG 时的相关警告: 4> CMake 警告(dev)在 C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules /FindPNG.cmake:34 (find_package):

4>    File C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPNG.cmake
4>    includes E:/project/third-party/OpenSceneGraph/CMakeModules/FindZLIB.cmake
4>    (found via CMAKE_MODULE_PATH) which shadows C:/Program Files (x86)/CMake
4>    2.8/share/cmake-2.8/Modules/FindZLIB.cmake.  This may cause errors later on
4>    .
4>  
4>    Policy CMP0017 is not set: Prefer files from the CMake module directory
4>    when including from there.  Run "cmake --help-policy CMP0017" for policy
4>    details.  Use the cmake_policy command to set the policy and suppress this
4>    warning.
4

1 回答 1

1

您可以简单地设置提到的 cmake 策略。我不知道如何通过 ExternalProject_add 做到这一点,但它确实解决了这个问题。源代码分发附带的 CMakeLists.txt 文件有一个部分已经设置了一些 cmake 策略。您可以添加将 CMP0017 策略设置为 NEW 的行,它会消除此警告。

if (COMMAND cmake_policy)
    ...

    cmake_policy (SET CMP0017 NEW)

    ...
endif ()
于 2015-07-26T05:58:31.633 回答