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选项,则缓存条目将被设置为给定值。

注意

如果同名普通变量已存在(参见变量评估规则),则缓存变量的内容将无法直接访问。如果策略CMP0126设置为OLD,则当前作用域中的任何普通变量绑定都将被移除。

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

设置环境变量

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

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

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

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

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

另请参阅