将普通、缓存或环境变量设置为给定值。请参阅 cmake-language(7) variables 文档了解普通变量和缓存条目的范围和交互。

此命令的签名指定一个 <value>... 占位符期望零个或多个参数。多个参数将作为分号分隔的列表 <CMake Language Lists> 连接起来,以形成要设置的实际变量值。零参数将导致普通变量被取消设置。请参阅 unset() 命令显式取消设置变量。

设置普通变量

set(<variable> <value>... [PARENT_SCOPE])

在当前函数或目录范围内设置给定的``<variable>``。

如果给出了 PARENT_SCOPE 选项,变量将被设置在当前范围之上的范围内。每个新目录或 function() 命令都会创建一个新范围。也可以使用 block() 命令创建作用域。此命令会将变量的值设置到父目录、调用函数或包含范围(以适用于手头的情况为准)。变量值的先前状态在当前范围内保持不变(例如,如果它之前未定义,它仍然是未定义的,如果它有一个值,它仍然是那个值)。

block(PROPAGATE)return(PROPAGATE) 命令可以用作 set(PARENT_SCOPE)unset(PARENT_SCOPE) 命令的替代方法更新父作用域。

设置缓存条目

set(<variable> <value>... CACHE <type> <docstring> [FORCE])

设置给定的缓存``<variable>``(缓存条目)。由于缓存条目旨在提供用户可设置的值,因此默认情况下这不会覆盖现有的缓存条目。使用“FORCE”选项覆盖现有条目。

<type> 必须指定为以下之一:

布尔

布尔“开/关”值。 cmake-gui(1) 提供了一个复选框。

文件路径

磁盘上文件的路径。 cmake-gui(1) 提供了一个文件对话框。

路径

磁盘上目录的路径。 cmake-gui(1) 提供了一个文件对话框。

字符串

一行文字。 cmake-gui(1) 如果设置了 STRINGS 缓存条目属性,则提供文本字段或下拉选择。

内部

一行文字。 cmake-gui(1) 不显示内部条目。它们可用于跨运行持久存储变量。使用这种类型意味着“FORCE”。

<docstring> 必须指定为一行文本,提供选项的快速摘要以呈现给 cmake-gui(1) 用户。

如果在调用之前缓存条目不存在或者给出了“FORCE”选项,那么缓存条目将被设置为给定的值。

备注

如果已存在同名的普通变量,则无法直接访问缓存变量的内容(请参阅 变量评估规则)。如果 policy:policy:CMP0126 设置为 OLD,则当前范围内的任何正常变量绑定都将被删除。

缓存条目可能在调用之前存在但没有设置类型,如果它是由用户通过 -D<var在 :manual:`cmake(1) 命令行创建的>=<value> <cmake -D>` 选项而不指定类型。在这种情况下,set 命令将添加类型。此外,如果 <type>PATHFILEPATH 并且命令行上提供的 <value> 是相对路径,则 set 命令会将路径视为相对于当前工作目录并将其转换为绝对路径。

设置环境变量

set(ENV{<variable>} [<value>])

环境变量 设置为给定值。 $ENV{<variable>} 的后续调用将返回这个新值。

此命令仅影响当前 CMake 进程,不影响调用 CMake 的进程,也不影响整个系统环境,也不影响后续构建或测试过程的环境。

如果在 ENV{<variable>} 之后没有给出参数或者如果 <value> 是一个空字符串,那么这个命令将清除环境变量的任何现有值。

<value> 之后的参数将被忽略。如果发现额外的参数,则会发出作者警告。

也可以看看

  • 取消设置()