考虑带有多行项目的
makefile
:
define ITEM
line $$ONE
line $$TWO
endef
item:
echo '$(ITEM)' | ... > $@
问题是,随着 ITEM 变得复杂,当我回显该项目时,我面临着报价错误和其他问题的风险。
我也可以运行导出:
export ITEM
item:
print "%s\n" '$${ITEM}' | ...
但我不确定是否会有相同的错误。
是否有一些 make 函数可以将变量的内容直接注入到 shell 中,就好像它被发送到
/dev/stdin
一样?
# e.g. something like:
$(info $ITEM) | ...
我知道我可以将值直接写入文件,我将能够通过 shell 处理该文件。但能够将其直接写入管道会导致短路。
sponge
envsubst
转向更重的东西,例如sed
以允许就地修改(以避免安装海绵)我也明白我可以将值导出到所有子shell:
parameter?=vars
在启用 .SECONDEXPANSION
时会引入大量开销) )zsh
make 的 tab 补全性能,这对 mac 用户来说是一个软要求但我没有导出证据,
echo "$$ITEM"
或print("%s/\n") "$$ITEM"
将有适当的转义。所以我必须测试一下。
什么不是“一种方法”,而是这样做的预期最佳实践?
如果答案是:使用
$(file ..)
,并从那里修改文件,那就这样吧;只是想确保这是最佳的。