CMake和“PATH”变量

4
在CMake中,我如何定义一个PATH类型的高速缓存变量(在Windows中,cmake-gui.exe)给我一个小的“...”按钮来获取弹出式对话框?现在,我正在使用以下语法:
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
是的,我在CMakeLists.txt文件中使用了从头开始的第一个配置,并将它们全部视为字符串。我正在使用2.8.10版本。 - Yeraze
我刚刚在我的回答中又添加了几个想法。 - Fraser
您也可以尝试添加FORCE,这会导致在更改变量时自动覆盖,而无需手动删除缓存。 - Ela782
1个回答

2

您的命令是正确的。

但是,似乎要更改变量的类型,您需要关闭cmake-gui.exe,从CMakeCache.txt中删除变量(或删除整个文件),然后重新打开cmake-gui.exe

另一种可能性是您之前将相同的值设置为STRING类型(在这种情况下,将保留第一个类型):

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

否则,您将在稍后使用unset取消相同的值并将其设置为不同的类型:
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")

由于某些原因,它没有起作用...具体而言:IF(EIGEN_DIR) SET(EIGEN_INCLUDE_DIRS ${EIGEN_DIR} CACHE PATH "Eigen包含文件的位置") ELSE() SET(EIGEN_INCLUDE_DIRS "" CACHE path "Eigen包含文件的位置") ENDIF(EIGEN_DIR)并且EIGEN_INCLUDE_DIRS仍然只是一个字符串,不是路径。(对于格式问题我很抱歉,我无法弄清楚SO的评论格式) - Yeraze
在你的ELSE部分,你使用了CACHE path而不是CACHE PATH。这可能是原因。 - Fraser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接