我正在寻找记录用于在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,只需转储几个配方即可。我想知道是否有人有健壮的方法来完成此任务。
正如我在上面的评论中所说,您可以使用GNU make的$(info ...)
函数。从上面的示例中并不能清楚地知道您想做什么。您为什么要尝试将输出放入文件中,然后进行处理?那重要吗?如果无法使用info
,则在shell中处理引用的规范方法是用单引号将字符串引起来,然后将每个单引号替换为'\''
。您说“ bash不喜欢”,但是我不知道那是什么意思。通常,您会执行以下操作:
@echo '$(subst $1,','\'')'
就逗号而言,如果您想使用$(call ...)
函数,则绝对有逗号问题。避免这种情况的唯一方法是将字符串放入变量中,例如:
output = foo, bar
... $(call blah,$(output))
隐藏call
中的逗号。