2015-11-04 458 views
0

我想安裝兩個項目:Foo和NeedsFoo。我已經使用cmake成功編譯並本地安裝了Foo。但是,我在服務器上,cmake似乎並不記得Foo在哪裏。CMake find_package()找不到include dirs

在cmake的配置NeedsFoo我有

list(APPEND CMAKE_MODULE_PATH "<prefix>/foo-install/CMake/FOO") # add path to FOOConfig.cmake 
find_package(FOO REQUIRED) 
if(FOO_FOUND) 
    MESSAGE(STATUS "Found FOO!") 
endif(FOO_FOUND) 

MESSAGE(STATUS ${FOO_INCLUDE_DIRS}) 

「找到了富!」打印---所以cmake發現FOO ---但變量${FOO_INCLUDE_DIRS}是空的,因此,該包不編譯。有什麼想法嗎?

編輯:似乎有另一個Foo副本安裝在服務器上。不幸的是,我無法使用它(它是我們項目的'主'分支,我需要使用我自己的分支)。我試着將find_package調用更改爲

find_package(FOO REQUIRED PATHS "<prefix>/foo-install/CMake/Foo" NO_DEFAULT_PATH) 

但是這並沒有解決問題。

+0

''CMAKE_MODULE_PATH'影響'find_package'的*模塊*模式:它用於查找'FindFoo.cmake'。這就是爲什麼你的第一種方法不起作用。但你的第二種方法應該工作。你嘗試過乾淨的配置(空建立目錄)嗎?在這種構建之後,什麼緩存條目「Foo_DIR」包含? (緩存的變量列在'CMakeCache.txt'中)。 – Tsyvarev

+0

乾淨的構建的第二種方法工作......不知道爲什麼 –

+0

事情是變量'Foo_FOUND','Foo_DIR'和一些其他*被緩存*。所以第二次運行'find_package()'不會更新它們。這是CMake常見的事情 - 如果某些東西不能按預期工作,那麼請清理構建目錄並重新運行cmake **。 – Tsyvarev

回答

0

確保已安裝標題,通常需要安裝-dev或-devel軟件包才能獲取標題。如果它們已安裝並且可以在系統中看到它們,則它們可能位於cmake不期望的路徑上。打開findFoo.cmake文件(在Linux上,通常位於/ usr/share/c make-x.y/modules中)並檢查預期位置列表,看看是否安裝了不常用的位置。

+0

在/ usr/share/cmake-xy/modules中似乎沒有一個「FindFoo.cmake」文件---雖然還有很多其他程序對應的「Find * .cmake」(Matlab,MPI,Git ,等等......) –

+0

你能告訴我Foo究竟在你的場景中嗎? –

+0

是的,它很MUQ:https://bitbucket.org/mituq/muq –