将 Makefile 中的一行替换为 STDIN

将 Makefile 中的一行替换为 STDIN

一个 Makefile 目标应该负责:

  • $ perl Markdown.pl src/index.md抓取(markdown 到 html)的输出
  • 使用该字符串替换一行,类似于CONTENT源自文件 src/template.html 的内容。 template.html 中该行没有其他行。

实现这一目标的优雅方法是什么?

答案1

就像 arcege 所说,不要修改实际的源文件。无论如何,使用以下命令会更容易awk

target:
    awk '{if($$0=="CONTENT"){system("perl Markdown.pl src/index.md")}else{print}}' src/template.html > build/template.html

如果您想让该行看起来更简洁,您可以将该 awk 代码放入脚本中。 (如果这样做,请更改$$0$0,这是必要的,因为否则 makefile 会解释它)

target:
    awk -f convert.awk src/template.html > build/template.html

答案2

一条规则是你必须这样做不是调整来源构建中的文件,因此无需就地修改。使用“构建”目录或类似的目录。

template_markdown:
    @mkdir -p build
    cp -p src/template.html build
    (echo /CONTENT/c; perl Markdown.pl src/index.md; echo .; echo w) | ed - build/template.html

这应该考虑到任何perl Markdown.pl本身不发出句点(“.”)的情况。

相关内容