あなたがマニュアルを作るGNUのCatalog of Rulesセクションを読めば、それが認識接尾辞の一つが.out
で、組み込みのルールがあることが判明:GNU Makeはファイルからfile.outを作成するデフォルトルールを持っているのはなぜですか?
%.out: %
# commands to execute (built-in):
@rm -f [email protected]
cp $< [email protected]
これはあなたが持っている場合ことを意味しディレクトリにxyz
というファイルがある場合は、単にmake xyz.out
と入力してxyz.out
を作成できます。
私の質問は、(同じ質問の二つの変種)である:
- このルールから利益を得ますか?
- これはどのような場合に使用されますか?私は、ルールのファウルを実行するために管理しているため
もちろん、私は聞いていますのよ。
名前test.01
は偽のターゲットであるが、依存関係の1つが
test.01.out
ある
test.01: ${PROGRAM} ${DRIVER} test.01.tst test.01.out ${DATA.01}
${DRIVER} ${D_FLAGS} [email protected]
:私のようないくつかのルールを持っていました。
make[1]: Circular test.01 <- test.01.out dependency dropped.
私もで
.out
接尾辞をドロップしようとした
:
.SUFFIXES:
.SUFFIXES: .sh
、それはいないようでした。積極的に(make -n
を使用していない正常に動作している)を実行すると、これは私のようなエラーの多くを提供します私が期待したように.out
のルールを中和する。それはGNU Makeの期待される機能ですか?
は、私はGNUの機能が.req
または類似した何かに私のサフィックスを変更してくださいこのバグを回避する必要がありますするつもりだと思いますが、それは迷惑であり、私は.out
ルールがある理由について困惑残っています標準のGNU Makeルールセットの一部。
ありがとうございました。だから、答えは(もしあれば)時間の霧の中で失われている - 私は私が驚いていると言えるだろうと思うが、私はそうではない。パターンルールを抑制する方法に関する情報は役立ちます。有難うございます。 '.SUFFIXES'でフーチングすることがパターンルールを抑制するのに役立たないことの確認も役立ちます。 (そして、推測では、あなた自身がファイルを作成するためにルールを使用しないので、そこには驚くことはありません!) –
私は個人的に私のmakefileにbuit-inルールを使用しません。私の経験では、彼らは最も単純な環境にのみ役立ちます。私はいつも新しい変数を追加するためにコンパイルパターンを再定義する必要があることを常に知っており、他は時間を無駄にするだけです。だから、私のmakefileは、通常、すべての組み込みルールを削除するためにスタンザを含んでいます。 – MadScientist
'の理由を知りたければ。Roland McGrathまたはRMS :) – MadScientist