Makefileの行末にコメントを印刷しないでください。

Makefileの行末にコメントを印刷しないでください。

メイクファイルの行の末尾にコメントを追加したいです。

rule:
    echo 1 # Print 1

ただし、このmakefileが実行されると、コマンドラインにもコメントが印刷されます。

$ make rule
echo 1 # Print 1
1

しかし、コマンドではなくコメントを隠したいです。印刷されないmakefileの行の末尾にコメントを追加する方法はありますか? (コメントの前に追加してコメントを非表示にすることはできますが@、これは行全体がコメントで行末ではない場合にのみ機能します。)

ベストアンサー1

これは# print 1コメントではありませんmake。行echo 1 # print 1全体(先行TABを除く)がシェルに渡されます(および$(SHELL)を使用して実行されます-c)。that-line追加引数として、シェルはそれをそのコンテキストでコメントとして解釈します。 aecho "foo # bar"や with $(SHELL)s など、コメントリーダーと見なされない他の状況では#そうではありません。いずれにせよ、使用または@無効にしない限り、.SILENTシェルmakeに渡されたコードが印刷されます。

作るMakefileレシピのコメントは、その行の#最初の文字でなければなりません。

rule:
# print 1:
    echo 1

あるいは、バックスラッシュを使用してコメント行を続行することもできます。

rule:
#\
    # print 1:
    echo 1

次のことができます。

rule:
    @# print 1:
    echo 1

これはこのレシピの各行に対してシェルを呼び出します。最初の行は1つのインラインシェルスクリプトです。シェルコメント、@スキップエコシェルに渡されたコードの一部makeではなく、シェルコードの一部です。

バラよりinfo make 'comments, in recipe'GNUシステムに関するmake追加情報(GNUの実装)

レシピのコメントはコメントではありません。そのままシェルに渡されます。シェルがこれをコメントとして扱うかどうかは、シェルによって異なります。

より一般的にinfo make commentsMakefileのコメントについて。


これでできることは、makeルールを使用してechoを完全に無効にし、シェルにその.SILENTオプションxtraceを使用してecho自体を実行させることです。

SHELL = sh -o xtrace
export PS4 =
.SILENT: rule

rule:
    echo 1 # print 1

おすすめ記事