有关如何在命令行中定义cmake中的(缓存)变量的模糊文档(直到Ver 3.2)?

时间:2015-05-19 07:46:55

标签: cmake

查看CMake documentation for the command line options,用于定义变量的-D选项存在一些歧义。

在命令行概要中有

-D<var>=<value>

在选项说明中,我们读到:

-D <var>:<type>=<value>

两个条目的差异在-D和变量定义之间的空格以及:<type>的存在/不存在。

空间有什么不同吗?指定或不指定类型有什么区别?它是否在任何情况下缓存?

从快速测试来看,空间似乎是可选的。如果未指定变量类型,则变量将CMakeCache.txt作为:

//No help, variable specified on the command line.
MYVARIABLENAME:UNINITIALIZED=MYVARIABLEVALUE

它不会出现在cmake-gui的缓存中。

这些行为是否记录在任何地方?

<小时/> 修改
我在CMake错误跟踪器中有reported an issue。如链接中所示,似乎某些解决方案已经开始,并且应该为CMake 3.3修复文档!

1 个答案:

答案 0 :(得分:1)

我不相信您所看到的行为会被记录下来,但您的结论通常是正确的。

如果未指定类型,则缓存的条目为type UNINITIALIZED。由于CMake不是强类型语言,因此您可以将此变量用作CMakeLists.txt中所需的任何类型 - 字符串,路径,列表等。但是,除非您明确更改CMakeLists.txt中的类型(例如,使用set调用),就缓存值而言,其类型将保持UNINITIALIZED

据我所知,这种类型只有在您使用CMake GUI时才有用,因此它可以适当地选择要用于变量的输入框类型,或者是否将其显示给用户是不是全部。

至于空间 - 这是一个更尴尬的情况。我有another answer,其中有一些细节,但基本上,空间应该没有效果,但在某些情况下确实如此。我建议-D参数之后添加空格。