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

Ambiguous documentation (until Ver 3.2) for how to define a (cached) variable in cmake from command line?

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

在命令行概要中有

-D<var>=<value>

在选项描述中我们读到:

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

这两个条目的区别在于 -D 和变量定义之间的 space,以及 :<type> 的 presence/absence。

space有什么区别吗?指定类型和不指定类型有什么区别?无论如何都会缓存吗?

从快速测试来看,space 似乎是可选的。而如果未指定变量类型,则变量进入 CMakeCache.txt 为:

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

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

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


编辑:
我在 CMake 错误跟踪器中有 reported an issue。正如在 link 中可见,似乎一些解决方案已经在进行中,文档应该为 CMake 3.3 修复!.

我不认为您看到的行为已记录在案,但您的结论大体上是正确的。

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

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

至于space——这是比较尴尬的情况。我有 another answer 详细介绍了这一点,但基本上,space 应该没有效果,但在某些情况下会起作用。我建议 不要 -D 参数之后放置 space。