Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 科马克公司&引用;路径“;变量_Cmake - Fatal编程技术网

Cmake 科马克公司&引用;路径“;变量

Cmake 科马克公司&引用;路径“;变量,cmake,Cmake,在CMake中,如何定义一个路径类型缓存变量(在Windows中,CMake gui.exe)为我提供获取弹出对话框的小“…”按钮?现在,我使用的语法如下: SET(LIBRARY_INCLUDE_DIR "something" CACHE PATH "Location of libraries") 但它似乎把它当作一根弦 更新: 这里有一个明确的例子: IF(EIGEN_DIR) SET(EIGEN_INCLUDE_DIRS ${EIGEN_D

在CMake中,如何定义一个路径类型缓存变量(在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)

而且,即使是在新的第一次运行CMake时,
EIGEN\u INCLUDE\u DIRS
也会作为字符串结束。

您的命令是正确的

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

另一种可能性是
字符串
类型之前设置相同的值(在这种情况下,保留第一种类型):

或者您以后
取消设置相同的值,然后
将其设置为不同的类型:

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")

当我尝试这一行,它的工作非常好。您是否尝试删除
cmakcache.txt
并再次生成?是的,它位于CMakeLists.txt文件中,我在第一次配置时从头开始使用该文件,它将它们都视为字符串。我使用的是2.8.10。我刚刚在我的答案中添加了几个想法。你也可以尝试添加强制,它会在你更改某些内容时导致变量被覆盖,而不必手动删除缓存。出于某种原因,这不起作用。。具体来说:IF(EIGEN_DIR)SET(EIGEN_INCLUDE_DIRS${EIGEN_DIR}缓存路径“EIGEN INCLUDE文件的位置”)ELSE()SET(EIGEN_INCLUDE_DIRS“缓存路径”EIGEN INCLUDE文件的位置)ENDIF(EIGEN_DIR)和EIGEN_INCLUDE_DIRS仍然只是一个字符串,而不是一个路径。(很抱歉格式化,我无法理解SO的注释格式化fubarness)在您的
ELSE
部分中,您有
缓存路径
,而不是
缓存路径
。这可能是原因。
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")