You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义CMake install()命令脚本的运行机制及相关问题咨询

CMake install(SCRIPT) 相关疑问解答

此问题是某问题的后续提问。

CMake支持在执行安装操作(即调用cmake --install触发install()命令执行时)运行自定义脚本,语法如下:

install([[SCRIPT <file>] [CODE <code>]]
        [COMPONENT <component>] [...])

SCRIPT形式会在安装阶段调用指定的CMake脚本文件,若脚本路径为相对路径,则以当前源目录为基准解析。

本文重点关注SCRIPT形式,而非CODE形式。

已知CMake查找脚本的方式,但存在以下疑问:

  • 其作用域行为如何?是否类似add_subdirectory()?或是类似调用CMake函数、展开CMake宏?亦或是其他情况?
  • 语法声明中的[...]是否意味着可以向脚本传递参数?
  • 若脚本无法共享其他install()命令使用的变量,该如何为其提供这些信息?
  • 能否在脚本内部使用install()命令以补充外部安装流程?

疑问解答

1. 作用域行为

install(SCRIPT)执行的脚本,其作用域独立于主构建脚本的配置阶段作用域,但会继承安装阶段的全局上下文。它既不像add_subdirectory()那样创建新的子目录作用域,也不像函数/宏那样在调用者作用域内执行:

  • 脚本在安装阶段单独运行,拥有自己的变量作用域,但可以访问安装阶段的全局变量(比如CMAKE_INSTALL_PREFIX这类内置变量)。
  • 脚本中定义的变量不会回传到主构建脚本的配置阶段,仅在脚本执行期间有效。

2. 能否传递参数

语法中的[...]并非用于传递自定义参数给脚本,它代表CMake允许的其他可选关键字参数(比如EXCLUDE_FROM_ALL等)。无法直接向SCRIPT脚本传递自定义参数。

3. 向脚本传递变量信息

若要让脚本获取主构建中的变量,有两种常用方法:

  • 在配置阶段通过configure_file()将变量值写入一个临时CMake脚本(比如install_config.cmake.in),生成后再用install(SCRIPT)调用这个生成的脚本。
  • 利用CMake的缓存变量:在主脚本中将需要传递的变量设置为缓存变量(set(VAR VALUE CACHE INTERNAL "")),脚本在安装阶段可以直接读取这些缓存变量。

4. 脚本内部使用install()命令

完全可以。脚本内部的install()命令会被纳入整个安装流程,和主脚本中定义的install()命令一样生效。你可以在脚本中补充安装规则,比如安装额外文件、执行自定义安装逻辑等。


内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 15:03:23