Перефразированный вопрос
Как я могу контролировать порядок, в котором CMake использует модули FindXXX.cmake?
Моя точная проблема
Например, OpenSceneGraph поставляется со своим собственным FindZLIB, который не так хорош, как FindZLIB Cmake. Модуль FindZLIB, поставляемый с OSG, не может найти мою установку ZLIB. У меня ZLIB установлен по пути CMAKE_INSTALL_PREFIX.
Во время сборки cmake предупреждает меня об этом.
OSG устанавливает путь к модулю в свой собственный каталог, и, таким образом, FindPNG (из CMake) неправильно использует FindZLIB OpenSceneGraph, поставляемый с ним. Итак, он не может найти ZLIB.
Как я могу предотвратить это? Я создаю OpenSceneGraph через вызов ExternalProject_Add. Я читал, что установка политики 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.
CMakeLists.txt
OpenSceneGraph. Найдите строку, которая, вероятно, должна выглядеть примерно так:set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
. Другими словами, он помещает собственный путь поиска модуля OSG перед путем CMake, чтобы он предшествовал ему. - person Alexander Shukaev   schedule 05.05.2013set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules)
, чтобы модули CMake имели приоритет над модулями OSG, а ZLib находилась в соответствии с правилами CMake по умолчанию. К сожалению, я думаю, что у вас нет вариантов, это разработчики OSG виноваты в таком тупом решении, которое они предлагают. - person Alexander Shukaev   schedule 05.05.2013