web-dev-qa-db-ja.com

Makeのレシピ行のプレフィックスとして@、-、+は何をしますか?

GNU Makefileマニュアルでは、 mentions これらのプレフィックス。

.ONESHELLが指定されている場合、レシピの最初の行のみが特別なプレフィックス文字(「@」、「-」、および「+」)についてチェックされます。

これらのプレフィックスは何をするもので、どこに記載されていますか?

157
Matt Joiner

タグ付きコマンドラインのmakeの動作を制御します。

  • @は、実行されるコマンドの通常の「エコー」を抑制します。

  • -は、実行されるコマンドの終了ステータスを無視することを意味します(通常、ゼロ以外の終了ステータスはビルドのその部分を停止します)。

  • +は、コマンドが正常に実行されないときに「make -nの下でこのコマンドを実行」(または「make -t」または「make -q」)を意味します。 --GNU Makeマニュアルの make および §9. のPOSIX仕様も参照してください。

+表記は、de facto(非標準化)メカニズムの(POSIX標準化)一般化であり、${MAKE}または$(MAKE)make -nの下で実行されます。

@はGNU Makeマニュアルの §5.2 で説明されています; -§5.5 で説明されています- §5.7.1+の使用に言及しています。)

205

@は、コマンドラインがコンソールにエコーアウトするのを防ぎます。 -sまたは--keep-silentを使用してグローバルに実行できます

-は、何らかの理由でコマンドが失敗した場合でも、makeを続行するように指示します。 -iフラグ(または--ignore-errors)を使用してグローバルに実行できます。

+あなたが尋ねる前に私は馴染みがありませんでした。私が知る限りでは、-n-t、および-qの効果を無効にします。これらはすべて、基本的にmakeに実際にコマンドを実行しないように指示します。そのため、先頭に+が付いた行が実行されます。

公式のGnu Makeマニュアルを読むと、それらはすべて Chapter 5 で言及されています。私の古いマニュアルのコピーでは、「コマンド」に関する章でしたが、用語「du jour」は「レシピ」のようです。

37
T.E.D.