2012-08-13 95 views
4

我目前正在嘗試編寫我的第一個非平凡的CMake項目,但我無法檢查任何FIND_PACKAGE()的輸出,因爲它似乎沒有將值賦予全局變量,我期望它應該!例如,下面的代碼:CMake的FIND_PACKAGE沒有設置變量

MESSAGE("CMake version: ${CMAKE_VERSION}") 
FIND_PACKAGE(Armadillo) 
IF(Armadillo_FOUND) 
    MESSAGE("Found Armadillo.") 
    MESSAGE("Armadillo include dir is: ${ARMADILLO_INCLUDE_DIR}") 
    MESSAGE("Armadillo lib's to be linked against: ${Armadillo_LIBRARIES}") 
    MESSAGE("Armadillo lib version: ${PACKAGE_FIND_VERSION}") 
ENDIF(Armadillo_FOUND) 

產生以下端子輸出

/build]$ CMake version: 2.6.4 
/build]$ Found Armadillo. 
/build]$ Armadillo include dir is: 
/build]$ Armadillo lib's to be linked against: 
/build]$ Armadillo lib version: 

我知道這是很基本的,但所有的教程我能找到這應該產生有用的輸出。有任何想法嗎??

回答

2

有一個在FindArmadillo.cmake此評論:

# The following variables are set when ARMADILLO is found: 
# HAVE_ARMADILLO  = Set to true, if all components of ARMADILLO have been 
#       found. 
# ARMADILLO_INCLUDES = Include path for the header files of ARMADILLO 
# ARMADILLO_LIBRARIES = Link these to use ARMADILLO 
# ARMADILLO_LFLAGS  = Linker flags (optional) 
2

感謝arrowdodger,你的答案是有幫助的,但是這是不完全的問題。問題是,在做FIND_PACKAGE(Armadillo)之後,沒有設置這些變量(甚至不是ARMADILLO_FOUND)變量。 Armadillo_FOUND(note小寫)變量已設置,似乎是由FIND_PACKAGE()函數而不是cmake模塊文件設置的。

將模塊文件複製到我的目錄並使用INCLUDE()命令而不是FIND_PACKAGE()命令調用它之後,我能夠找到問題。它似乎涉及到使用cmake 2.6.4和Armadillo 2.2.3(都是過時的版本,但我受限於我們的系統分佈式構建這些)。正如我已經安裝了犰狳和Find_PACKAGE()似乎發現這個(設置Armadillo_FOUND爲true),然而,在模塊文件以下行失敗(並指出這樣做):

# Checks 'RECQUIRED', 'QUIET' and versions. 
include(FindPackageHandleStandardArgs) 
find_package_handle_standard_args(Armadillo 
    REQUIRED_VARS ARMADILLO_LIBRARY ARMADILLO_INCLUDE_DIR 
    VERSION_VAR ARMADILLO_VERSION_STRING) 
# version_var fails with cmake < 2.8.4 

FIND_PACKAGE()不似乎在這一行失敗,並且如上所述,FIND_PACKAGE()將Armadillo_FOUND設置爲true,但由於此失敗,模塊文件中設置的所有變量都不會傳播回CMakeLists.txt文件。從上面的列表中刪除VERSION_VAR修復了這個問題。當然,更好的解決辦法是更新cmake和犰狳,但這不是我的選擇:(