私は、次のCMakeLists.txt
がありますCMakeのをfind_packageにNO_CMAKE_PACKAGE_REGISTRYの影響()
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
が~/.cmake/package/FOO
を見てfind_package()
を禁じますが、私はここに何もないということです。私はcmake 2.8.9とcmake 3.5.1で同じ動作をしています。
なぜfind_package()
が最初のケースでファイルを見つけられないのですか?
'FOOConfig.cmake'を' FOOConfig.cmake'に同じ場所でコピーしても動作しません。しかし、 'CMAKE_PREFIX_PATH'がローカルディレクトリ' $ {CMAKE_SOURCE_DIR}/cmake/'を指すように定義していれば、どちらの場合でも実際に動作します。ありがとう! – xiawi
'find_package()'の異なるモードは、検索と異なる変数に対して異なるアルゴスムを使用します。もともと設定した変数 'CMAKE_MODULE_PATH'は**モジュール**モードのみに影響し、変数' CMAKE_PREFIX_PATH'は** config **モードのみに影響します。 – Tsyvarev