CMake设置缓存正在采取" CACHE"作为变量

时间:2015-11-13 22:55:35

标签: cmake

我试图从命令行覆盖MY_VAR的默认值,但是我得到了意外的结果:

摘自我的CMakeLists.txt:

set( MY_VAR MY_VAR_DEF_VALUE CACHE INTERNAL "This is my_var" [FORCE] )
message( "MY_VAR = ${MY_VAR}" )

cmake命令:

cmake -DMY_VAR:INTERNAL=MY_VAR_USER_VALUE ..

输出:

MY_VAR = MY_VAR_DEF_VALUE;CACHE;INTERNAL;This is my_var;[FORCE]

我期待输出为:

MY_VAR = MY_VAR_USER_VALUE

奇怪的是,MY_VAR在CMakeCache.txt中正确更新,请参阅摘录:

//No help, variable specified on the command line.

MY_VAR:INTERNAL=MY_VAR_USER_VALUE

注意:我正在进行源代码构建

更新(2015年11月15日):

我删除了FORCE周围的方括号,输出为:

  

MY_VAR = MY_VAR_DEF_VALUE

我删除了FORCE,输出为:

  

MY_VAR = MY_VAR_DEF_VALUE

2 个答案:

答案 0 :(得分:0)

它以这种方式运作:

cd path/to/build/dir && cmake -DVAR=VALUE path/to/src

首先来自path/to/src/CMakeLists.txt的cmake运行脚本(步骤1) 之后,它将VAR设置为正确的值(步骤2)。 在CMakeLitst.txt中,您有:

set(VAR DEF_VALUE FORCE)
message(STATUS "VAR: ${VAR}")

FORCE告诉cmake重写缓存,所以在第1步你有默认值, 之后cmake打印它的值,当然它是DEF_VALUE, 之后,它使用-D命令设置CACHE。

答案 1 :(得分:0)

从set命令中删除[FORCE]选项,并将INTERNAL选项替换为指示变量类型的关键字之一(BOOLSTRING等)。 FORCE选项会导致CMakeLists.txt覆盖您在命令行中指定的任何内容。指定INTERNAL隐含FORCE(请参阅the CMake docs)。

您看到的部分奇怪行为可能是因为您在FORCE周围加了方括号。如果 想要使用FORCE,则方括号不应该在那里(CMake文档中的方括号只是表示它是可选参数)。