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

如何将GNU Make变量传递至Guile?

GNU Make传递变量到Guile的规范方案

问题场景

当前的Makefile规则尝试传递自动变量$*到Guile:

%.txt:
    @echo $* $(guile (string-upcase $*))

执行make foo.txt时触发Unbound variable: foo错误——因为Make展开后Guile代码变成(string-upcase foo),foo被当作未定义的Guile符号而非字符串值。

给$*加双引号能暂时解决基础场景的问题:

%.txt:
    @echo $* $(guile (string-upcase "$*"))

但如果$*包含双引号(比如目标是"bar".txt),会触发Guile语法错误,因为引号嵌套冲突。

规范解决方案

使用GNU Make为Guile内置的makefile-value函数,直接从Guile内部获取Make变量(包括自动变量)的值:

%.txt:
    @echo $* $(guile (string-upcase (makefile-value "*")))

原理说明

  • makefile-value的参数是不带$前缀的Make变量名,比如自动变量*、普通变量CC等。
  • 它会直接返回对应Make变量的原始字符串值,无需手动添加引号或处理转义,完美规避特殊字符(如双引号)引发的语法问题。

测试验证

执行make foo.txt会输出预期结果:

foo FOO

若目标是包含双引号的"bar".txt,执行make "\"bar\".txt"(需shell转义引号),会输出:

"bar" "BAR"

完全符合预期且无语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:40:29