影響

2016-09-22 73 views
0

我有以下CMakeLists.txt影響

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()在第一種情況下找不到該文件?

回答

1

有很多find_package兩種模式:第一個,簡單,搜索FindFOO.cmake模塊,第二個更復雜的搜索FOOConfig.cmake配置文件。

默認情況下,CMake會嘗試這兩種模式,因此模塊模式會成功找到您的文件。

但是選項NO_CMAKE_PACKAGE_REGISTRY僅適用於配置模式,在任何情況下都找不到您的文件。同樣的效果將

find_package(FOO NO_MODULE) 
+0

如果我複製'FindFOO.cmake'成'FOOConfig.cmake'它不起作用或者同一地點造成的。但是如果我將'CMAKE_PREFIX_PATH'定義爲指向我的本地目錄'$ {CMAKE_SOURCE_DIR}/cmake /',那麼它確實適用於這兩種情況。謝謝! – xiawi

+0

不同模式的'find_package()'使用不同的algothms進行搜索和不同的變量。您最初設置的變量'CMAKE_MODULE_PATH'僅影響**模塊**模式,變量'CMAKE_PREFIX_PATH'僅影響** config **模式。 – Tsyvarev