关于如何从命令行在 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。
查看 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。