2013-05-11 73 views
4

在CMake中,如何定義一個PATH類型的緩存變量(在Windows cmake-gui.exe中)給我一點點「...」按鈕來獲取彈出對話框?現在,我使用的語法如下:CMake&「PATH」變量

SET(LIBRARY_INCLUDE_DIR "something" CACHE PATH "Location of libraries") 

但它似乎將它視爲一個字符串。

更新:

這裏有一個明顯的例子:

IF(EIGEN_DIR) 
    SET(EIGEN_INCLUDE_DIRS ${EIGEN_DIR} CACHE PATH "Location of the Eigen include files") 
ELSE() 
    SET(EIGEN_INCLUDE_DIRS "" CACHE path "Location of the Eigen include files") 
ENDIF(EIGEN_DIR) 

而且EIGEN_INCLUDE_DIRS捲起爲字符串,即使在cmake的的新鮮首次運行。

+1

當我嘗試這一行,它工作得很好。你是否嘗試刪除'CMakeCache.txt'並重新生成? – Morwenn 2013-05-11 13:55:11

+0

是的,它在CMakeLists.txt文件中,我從頭開始使用第一個配置,並將它們全部視爲字符串。我使用2.8.10。 – Yeraze 2013-05-11 20:00:47

+0

我剛剛給我的答案增加了幾個想法。 – Fraser 2013-05-12 17:20:32

回答

2

您的命令是正確的。

但是,似乎改變變量的類型,你需要關閉的cmake-gui.exe,刪除CMakeCache.txt變量(或刪除整個文件),然後再重新打開的cmake-gui.exe

另一種可能性是,你set相同貨值爲STRING類型(在這種情況下,第一種類型的保管):

SET(LIBRARY_INCLUDE_DIR "something" CACHE STRING "Location of libraries") 
SET(LIBRARY_INCLUDE_DIR "something" CACHE PATH "Location of libraries") 

否則你unset相同的值後,它set到不同的類型:

SET(LIBRARY_INCLUDE_DIR "something" CACHE PATH "Location of libraries") 
UNSET(LIBRARY_INCLUDE_DIR CACHE) 
SET(LIBRARY_INCLUDE_DIR "something" CACHE STRING "Location of libraries") 
+0

出於某種原因,這不是工作..具體做法是: IF(EIGEN_DIR) \t SET(EIGEN_INCLUDE_DIRS $ {EIGEN_DIR}緩存路徑 「的徵包括文件的位置」) ELSE() \t SET(EIGEN_INCLUDE_DIRS 「」 CACHE路徑「Eigen包含文件的位置」) ENDIF(EIGEN_DIR) 而EIGEN_INCLUDE_DIRS仍然只是一個字符串,而不是路徑。 (抱歉格式化,我無法弄清楚SO的評論格式化fubarness) – Yeraze 2013-05-19 00:21:14

+0

在你的'ELSE'部分,你有'CACHE路徑'而不是'CACHE PATH'。這可能是原因。 – Fraser 2013-05-19 00:41:34