如何将多行 make 变量直接打印到管道中?

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

考虑带有多行项目的

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:

  • 如果我的扩展包含在递归 make 项目中,或者包含大量导出开销的 make 项目中,这可能会出现问题(例如,默认为 env 值的
    parameter?=vars
    在启用
    .SECONDEXPANSION
    时会引入大量开销) )
  • 特别是,导出太多可能会破坏
    zsh
    make 的 tab 补全性能,这对 mac 用户来说是一个软要求

但我没有导出证据,

echo "$$ITEM"
print("%s/\n") "$$ITEM"
将有适当的转义。所以我必须测试一下。


什么不是“一种方法”,而是这样做的预期最佳实践?

如果答案是:使用

$(file ..)
,并从那里修改文件,那就这样吧;只是想确保这是最佳的。

makefile
© www.soinside.com 2019 - 2024. All rights reserved.