如何在Makefile中记录确切的配方行

问题描述 投票:0回答:1

我正在寻找记录用于在makefile中构建工件的确切命令。我希望将其存储在文件中以备后用。由于引号,我遇到了问题。基本上,我想要的是:

define record_and_run_recipe
    @echo '$(2)' > $1
    $2
endef


all:
    $(call record_and_run_recipe,out.cmd,\
            @echo 'hello world "$$1"' )
    cat out.cmd

我想输出(准确)

 @echo 'hello world "$1"'

当然,引号最终会与变量扩展中的引号匹配,这会使所有内容混乱。 (我得到@echo hello world代替)。 Bash也不喜欢'\'',所以我不能简单地做$(2:'=\')。我也似乎对,字符有疑问...

我不是要调试整个makefile,只需转储几个配方即可。我想知道是否有人有健壮的方法来完成此任务。

bash makefile
1个回答
0
投票

正如我在上面的评论中所说,您可以使用GNU make的$(info ...)函数。从上面的示例中并不能清楚地知道您想做什么。您为什么要尝试将输出放入文件中,然后进行处理?那重要吗?如果无法使用info,则在shell中处理引用的规范方法是用单引号将字符串引起来,然后将每个单引号替换为'\''。您说“ bash不喜欢”,但是我不知道那是什么意思。通常,您会执行以下操作:

@echo '$(subst $1,','\'')'

就逗号而言,如果您想使用$(call ...)函数,则绝对有逗号问题。避免这种情况的唯一方法是将字符串放入变量中,例如:

output = foo, bar ... $(call blah,$(output))

隐藏call中的逗号。
© www.soinside.com 2019 - 2024. All rights reserved.