我正在使用Guile中的$(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,~%编码换行符,~/编码制表符。但是根据上面的错误消息,似乎至少在生成的菜谱中缺少了换行符。
发布于 2021-09-18 16:30:37
您不能这样做,就像让$(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)"))https://stackoverflow.com/questions/69233228
复制相似问题