如何从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
相关产品推荐
相关产品推荐

