如何控制CMake使用FindXXX.cmake模块的顺序?
例如,OpenSceneGraph带有自己的FindZLIB,它不如FindZLIB Cmake自带的那么好.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> C语言中的CMake警告(dev)/ / 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.
答案 0 :(得分:1)
您只需设置提到的cmake政策即可。我不知道如何通过ExternalProject_add来做到这一点,但它确实解决了这个问题。源分发附带的CMakeLists.txt文件有一个部分,其中已设置了一些cmake策略。您可以添加一行,将CMP0017策略设置为NEW,并删除此警告。
if (COMMAND cmake_policy)
...
cmake_policy (SET CMP0017 NEW)
...
endif ()