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

如何从Shell中获取Boost Build/b2/bjam的jamroot变量值

在Boost Build(b2)中实现命令行打印Jam变量值

Boost Build(b2)本身没有原生的--print-variable选项,但可以通过自定义规则和命令行参数处理来实现类似CMake的功能,步骤如下:

1. 在Jamroot/Jamfile中添加自定义逻辑

在你的Jamroot或目标Jamfile中添加以下代码,用于解析命令行参数并打印指定变量:

# 定义打印变量的规则
rule print-variable ( varname )
{
    if $(varname) in $(.VARIABLES)
    {
        ECHO $(varname) = $($(varname)) ;
    }
    else
    {
        ECHO Error: Variable $(varname) is not defined. ;
        EXIT 1 ;
    }
}

# 处理命令行传入的--print-variable参数
if $(ARGV) matches "--print-variable=*"
{
    local varname = $(ARGV:M--print-variable=*) ;
    varname = $(varname:G=*) ; # 提取等号后的变量名
    print-variable $(varname) ;
    EXIT 0 ; # 打印后直接退出,不执行后续构建逻辑
}

# 原有的Jam配置代码
MY_VARIABLE = 42 ;
# ... 其他构建规则

2. 命令行调用方式

在Jamroot所在目录或下级目录执行以下命令,即可获取指定变量的值:

b2 --print-variable=MY_VARIABLE

执行后会输出:

MY_VARIABLE = 42

如果指定的变量未定义,会输出错误信息并返回非零退出码:

Error: Variable UNDEFINED_VAR is not defined.

补充说明

  • 上述逻辑会优先处理--print-variable参数,一旦检测到该参数,执行打印后就会退出,不会触发正常的构建流程。
  • 如果需要同时支持多个变量打印,可以扩展规则,允许传入多个变量名(比如用逗号分隔)。
  • 若要在全局所有Jamfile中都能使用该功能,可以将打印规则和参数处理逻辑放到site-config.jam或user-config.jam中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:35:58