我想安裝兩個項目: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)
但是這並沒有解決問題。
''CMAKE_MODULE_PATH'影響'find_package'的*模塊*模式:它用於查找'FindFoo.cmake'。這就是爲什麼你的第一種方法不起作用。但你的第二種方法應該工作。你嘗試過乾淨的配置(空建立目錄)嗎?在這種構建之後,什麼緩存條目「Foo_DIR」包含? (緩存的變量列在'CMakeCache.txt'中)。 – Tsyvarev
乾淨的構建的第二種方法工作......不知道爲什麼 –
事情是變量'Foo_FOUND','Foo_DIR'和一些其他*被緩存*。所以第二次運行'find_package()'不會更新它們。這是CMake常見的事情 - 如果某些東西不能按預期工作,那麼請清理構建目錄並重新運行cmake **。 – Tsyvarev