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

Bjam变量赋值失败?如何正确为字符串变量赋值

Bjam中正确的字符串变量赋值方式

你的问题核心是混淆了Bjam自身语法和actions块内的shell语法:

问题根源

actions块里的代码并不是Bjam解释执行的,而是会被展开后传递给系统shell作为脚本执行。你写的epath = ...是Bjam的变量赋值语法,但在shell里会被当成命令,自然找不到epath命令;basename ( $(epath) )也不符合shell的语法(shell调用命令不需要括号),所以报错。

两种正确解决方法

方法1:用Bjam语法在actions外提前计算

把变量赋值和函数调用移到actions块外面,先通过Bjam计算好值,再在actions里引用:

import path : basename ;

# 在actions外部用Bjam语法计算变量
local epath = $(MY_ROOT_PATH)/projects/mytest/bin/gcc-9/release/qt5client ;
local ename = basename $(epath) ;

actions make_mytest_install
{
    echo "make_mytest_install: MY_ROOT_PATH $(MY_ROOT_PATH) PWD $(PWD:E=not_set)" ;
    echo "epath $(epath) ename $(ename)" ;
}
explicit install-gettext ;
make install-mytest : : @make_mytest_install ;

方法2:用shell语法在actions内处理

如果需要在actions里动态计算,要使用shell的语法(注意shell变量赋值不能有空格,调用命令用shell的格式):

import path : basename ;

actions make_mytest_install
{
    echo "make_mytest_install: MY_ROOT_PATH $(MY_ROOT_PATH) PWD $(PWD:E=not_set)" ;
    # shell变量赋值:等号前后不能有空格
    epath="$(MY_ROOT_PATH)/projects/mytest/bin/gcc-9/release/qt5client" ;
    # shell调用basename命令,用$()捕获输出
    ename=$(basename "$epath") ;
    echo "epath $epath ename $ename" ;
}
explicit install-gettext ;
make install-mytest : : @make_mytest_install ;

关键提醒

  • Bjam的核心语法(变量赋值、函数调用、规则定义)要写在actions块之外;
  • actions块的内容是shell脚本模板,只能用shell的语法,变量引用用$变量名(shell语法),而Bjam的变量会被先展开成对应的值传递给shell。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:50:31