【问题标题】:Generating a complete GNU Make recipe with Guile使用 Guile 生成完整的 GNU Make 配方
【发布时间】:2021-11-12 21:51:11
【问题描述】:

我正在使用 GNU Make 中的 $(guile ...) 支持,但我无法从 Guile 中生成完整的配方。

这种传统方法按预期工作:

brazil:
<--tab-->@echo Ere I am J.H.

(其中&lt;--tab--&gt; 是 ASCII 制表符,根据需要)

但是当我尝试这个假定的等效项时:

$(guile (format #f "brazil:~%~/@echo Ere I am J.H."))

我在运行make brazil 时收到以下错误消息:

make: *** No rule to make target '@echo', needed by 'brazil'.  Stop.

我的印象是format~% 编码换行符,~/ 编码制表符。但根据上面的错误消息,生成的配方中似乎至少缺少换行符。

【问题讨论】:

    标签: gnu-make guile


    【解决方案1】:

    你不能这样做,就像让 $(shell ...) 调用定义多行规则一样,就像你不能使用 define / endef 创建一个然后将整个多行规则简单地扩展为$(MY_VAR)

    单行的扩展(如$(guile ...) 操作)不能扩展为多行输出:make 使用面向行的解析器并且它已经解析了这一行:任何后续的换行符将被视为普通空格(不是换行符)。

    您需要使用$(eval ...) 告诉make 将输出视为实际的多行makefile sn-p。所以你想要:

    $(eval $(guile (format #f "brazil:~%~/@echo Ere I am J.H.")))
    

    如果您可以将配方放在一行中,您也可以使用它来代替:

    $(guile (format #f "brazil: ; @echo Ere I am J.H."))
    

    如果必须是多行的,您也可以将配方放入变量中并使用:

    $(guile (format #f "brazil: ; $(MY_RECIPE)"))
    

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2022-01-16
      • 2013-07-01
      • 1970-01-01
      相关资源
      最近更新 更多