使用 Guile 生成完整的 GNU Make 配方
Generating a complete GNU Make recipe with Guile
我正在使用 GNU Make 中的 $(guile ...)
支持,但我无法从 Guile 中生成完整的配方。
这种传统方法按预期工作:
brazil:
<--tab-->@echo Ere I am J.H.
(其中 <--tab-->
是 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
,~%
编码换行符,~/
编码制表符。但是根据上面的错误消息,生成的配方中似乎至少缺少换行符。
你不能这样做,就像让 $(shell ...)
调用用多行定义规则一样不起作用,就像你不能使用 define
/ endef
创建一个完整的多行规则,然后用 $(MY_VAR)
.
简单地扩展它
单行的扩展(如$(guile ...)
操作)不能扩展到多行输出:make使用面向行的解析器并且它已经解析了这一行:任何后续换行将被视为普通空格(不是换行符)。
您需要使用 $(eval ...)
告诉 make 将输出视为实际的多行 makefile 片段。所以你想要:
$(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)"))
我正在使用 GNU Make 中的 $(guile ...)
支持,但我无法从 Guile 中生成完整的配方。
这种传统方法按预期工作:
brazil:
<--tab-->@echo Ere I am J.H.
(其中 <--tab-->
是 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
,~%
编码换行符,~/
编码制表符。但是根据上面的错误消息,生成的配方中似乎至少缺少换行符。
你不能这样做,就像让 $(shell ...)
调用用多行定义规则一样不起作用,就像你不能使用 define
/ endef
创建一个完整的多行规则,然后用 $(MY_VAR)
.
单行的扩展(如$(guile ...)
操作)不能扩展到多行输出:make使用面向行的解析器并且它已经解析了这一行:任何后续换行将被视为普通空格(不是换行符)。
您需要使用 $(eval ...)
告诉 make 将输出视为实际的多行 makefile 片段。所以你想要:
$(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)"))