查看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的缓存中。
这些行为是否记录在任何地方?
<小时/> 修改
答案 0 :(得分:1)
我不相信您所看到的行为会被记录下来,但您的结论通常是正确的。
如果未指定类型,则缓存的条目为type UNINITIALIZED
。由于CMake不是强类型语言,因此您可以将此变量用作CMakeLists.txt中所需的任何类型 - 字符串,路径,列表等。但是,除非您明确更改CMakeLists.txt中的类型(例如,使用set
调用),就缓存值而言,其类型将保持UNINITIALIZED
。
据我所知,这种类型只有在您使用CMake GUI时才有用,因此它可以适当地选择要用于变量的输入框类型,或者是否将其显示给用户是不是全部。
至于空间 - 这是一个更尴尬的情况。我有another answer,其中有一些细节,但基本上,空间应该没有效果,但在某些情况下确实如此。我建议不在-D
参数之后添加空格。