Makefileの1行をSTDINに置き換える

Makefileの1行をSTDINに置き換える

Makefileターゲットは次の責任を負う必要があります。

  • $ perl Markdown.pl src/index.mdインポート(htmlにマークダウン)出力
  • CONTENTsrc / 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これは、ピリオド(「.」)を表示しないすべての場合を考慮する必要があります。

関連情報