首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Guile生成完整的Guile配方

用Guile生成完整的Guile配方
EN

Stack Overflow用户
提问于 2021-09-18 09:10:43
回答 1查看 57关注 0票数 0

我正在使用Guile中的$(guile ...)支持,但我很难从Guile内部生成完整的菜谱。

这一传统方法如预期的那样起作用:

代码语言:javascript
复制
brazil:
<--tab-->@echo Ere I am J.H.

(根据需要,<--tab-->是ASCII制表符)

但当我尝试这个假设-等价物:

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

在运行make brazil时,将收到以下错误消息

代码语言:javascript
复制
make: *** No rule to make target '@echo', needed by 'brazil'.  Stop.

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-18 16:30:37

您不能这样做,就像让$(shell ...)调用用多行定义规则一样,也不能使用define / endef创建完整的多行规则,然后简单地用$(MY_VAR)扩展它。

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

您需要使用$(eval ...)告诉make将输出作为一个实际的多行makefile片段来处理。所以你想:

代码语言:javascript
复制
$(eval $(guile (format #f "brazil:~%~/@echo Ere I am J.H.")))

如果您可以将菜谱放在一行上,也可以使用它:

代码语言:javascript
复制
$(guile (format #f "brazil: ; @echo Ere I am J.H."))

您还可以将食谱(如果必须是多行的话)放入变量中,并使用:

代码语言:javascript
复制
$(guile (format #f "brazil: ; $(MY_RECIPE)"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69233228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档