2013-05-11 123 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