У меня есть следующие CMakeLists.txt
:влияние NO_CMAKE_PACKAGE_REGISTRY на CMake find_package()
cmake_minimum_required(VERSION 2.6)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
find_package(FOO QUIET NO_CMAKE_PACKAGE_REGISTRY)
if (FOO_FOUND)
message("FOO is found")
else (FOO_FOUND)
message("FOO not found")
endif (FOO_FOUND)
find_package(FOO QUIET)
if (FOO_FOUND)
message("FOO (2) is found")
else (FOO_FOUND)
message("FOO (2) not found")
endif (FOO_FOUND)
Существует файл ${CMAKE_SOURCE_DIR}/cmake/FindFOO.cmake
. Однако, когда я бегу cmake
обнаруживает пакет FOO
только во втором случае:
-- (...)
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
FOO not found
FOO (2) is found
-- Configuring done
-- Generating done
-- Build files have been written to: /home/me/tmp/build
Мое понимание документации является то, что NO_CMAKE_PACKAGE_REGISTRY
запрещает find_package()
смотреть на ~/.cmake/package/FOO
, но я не имею ничего здесь. У меня такое же поведение с cmake 2.8.9 и cmake 3.5.1.
Почему find_package()
не находит файл в первом случае?
Если я копирую 'FindFOO.cmake' в' FOOConfig.cmake' в том же месте, он не работает. Но если я определяю 'CMAKE_PREFIX_PATH', чтобы указать на мой локальный каталог' $ {CMAKE_SOURCE_DIR}/cmake/', то он работает в обоих случаях. Благодаря! – xiawi
В разных режимах 'find_package()' используются разные альготы для поиска и разные переменные. Переменная 'CMAKE_MODULE_PATH', которую вы устанавливаете первоначально, влияет только на режим ** module **, переменная' CMAKE_PREFIX_PATH' влияет только на режим ** config **. – Tsyvarev