set¶
将普通变量、缓存变量或环境变量设置为给定值。 请参阅 cmake-language(7) 变量 文档,了解普通变量和缓存条目的作用域和交互。
此命令的签名指定 <value>...
占位符,期望零个或多个参数。 多个参数将作为 分号分隔的列表 连接,以形成要设置的实际变量值。
设置普通变量¶
- set(<variable> <value>... [PARENT_SCOPE])¶
在当前函数或目录作用域中设置或取消设置
<variable>
如果至少给出一个
<value>...
,则将变量设置为该值。如果没有给出值,则取消设置变量。 这等效于
unset(<variable>)
。
如果给出了
PARENT_SCOPE
选项,则变量将在当前作用域之上的作用域中设置。 每个新目录或function()
命令都会创建一个新作用域。 也可以使用block()
命令创建作用域。set(PARENT_SCOPE)
将把变量的值设置到父目录、调用函数或包含作用域中(以适用于具体情况者为准)。 变量值之前的状态在当前作用域中保持不变(例如,如果之前未定义,则仍然未定义;如果之前有值,则仍然是该值)。block(PROPAGATE)
和return(PROPAGATE)
命令可以用作set(PARENT_SCOPE)
和unset(PARENT_SCOPE)
命令的替代方法,以更新父作用域。
注意
在评估 变量引用 形式为 ${VAR}
时,CMake 首先搜索具有该名称的普通变量。 如果不存在这样的普通变量,CMake 将接着搜索具有该名称的缓存条目。 因此,**取消设置普通变量可能会暴露之前隐藏的缓存变量**。 要强制形式为 ${VAR}
的变量引用返回空字符串,请使用 set(<variable> "")
,这将清除普通变量,但使其保持已定义状态。
设置缓存条目¶
- set(<variable> <value>... CACHE <type> <docstring> [FORCE])¶
设置给定的缓存
<variable>
(缓存条目)。 由于缓存条目旨在提供用户可设置的值,因此默认情况下不会覆盖现有缓存条目。 使用FORCE
选项覆盖现有条目。<type>
必须指定为以下之一BOOL
布尔值
ON/OFF
值。cmake-gui(1)
提供一个复选框。FILEPATH
磁盘上文件的路径。
cmake-gui(1)
提供一个文件对话框。PATH
磁盘上目录的路径。
cmake-gui(1)
提供一个文件对话框。STRING
一行文本。
cmake-gui(1)
提供一个文本字段或下拉选择,如果设置了STRINGS
缓存条目属性。INTERNAL
一行文本。
cmake-gui(1)
不显示内部条目。 它们可以用于跨运行持久存储变量。 使用此类型意味着FORCE
。
<docstring>
必须指定为一行文本,为cmake-gui(1)
用户提供选项的快速摘要。如果缓存条目在调用之前不存在,或者给出了
FORCE
选项,则缓存条目将设置为给定值。缓存条目可能在调用之前存在,但如果它是在
cmake(1)
命令行上由用户通过-D<var>=<value>
选项创建的,并且没有指定类型,则可能没有设置类型。 在这种情况下,set
命令将添加类型。 此外,如果<type>
是PATH
或FILEPATH
,并且命令行上提供的<value>
是相对路径,则set
命令会将该路径视为相对于当前工作目录,并将其转换为绝对路径。