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

如何在不同Makefile之间正确传递包含$符号的变量

Makefile传递含$符号变量的解决方案

核心原因

$是Makefile的保留字符,用于标记变量引用,每被Make解析一次就会消耗一层转义;如果通过命令行传递变量,还会额外经过shell层解析,多重转义叠加就会导致变量值异常。

方案1:通过export传递(推荐,一致性最高)

该方式无需通过命令行传参,避开shell层解析,仅需要处理Make本身的转义规则:

Makefile1 代码

# 表示字面量$需要在Makefile中写两个$$
RPATH1 = 12$$34
export RPATH1

all:
    @echo RPATH1 "(Makefile1)" $(RPATH1)
    @make -f Makefile2

Makefile2 代码

all:
    # 使用value函数获取变量原始值,避免Make二次解析$符号
    @echo RPATH1 "(Makefile2)" $(value RPATH1)

运行输出

$ make -f Makefile1
RPATH1 (Makefile1) 12$34
make[1]: Entering directory '/tmp/make'
RPATH1 (Makefile2) 12$34
make[1]: Leaving directory '/tmp/make'

方案2:命令行显式传参

如果必须通过make -f Makefile2 变量=值的形式传递参数,需要对$做四层转义,同时用单引号包裹避免shell拆分参数:

Makefile1 代码

# 四层$最终传递到子make解析后得到一个字面量$
RPATH1 = 12$$$$34
export RPATH1

all:
    @echo RPATH1 "(Makefile1)" $(RPATH1)
    @make -f Makefile2 RPATH2='$(RPATH1)'

Makefile2 代码

all:
    @echo RPATH1 "(Makefile2)" $(value RPATH1)
    @echo RPATH2 "(Makefile2)" $(value RPATH2)

运行输出

$ make -f Makefile1
RPATH1 (Makefile1) 12$34
make[1]: Entering directory '/tmp/make'
RPATH1 (Makefile2) 12$34
RPATH2 (Makefile2) 12$34
make[1]: Leaving directory '/tmp/make'

内容的提问来源于stack exchange,提问作者Adriano dos Santos Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:01