0

Makeは正常に動作していますが、デフォルトでは、を実行しても、変更されたファイルのみをコンパイルしますmake all。それはのように言いNothing to Doます。

すべてのファイルをコンパイルする必要があるシナリオの1つは、複数の.cファイルでアクセスされているヘッダーファイルの何かを変更した場合です。.cしかし、makeは、ファイルを再度開くまでそれを認識しませんsave & quit

Makefileの内容はこの投稿で見ることができます:

Makefileに関する質問-「$+」とは何ですか?ここで.cファイル/依存関係はどこで呼び出されますか?

これも問題ですが、ここでお話ししたい実際の問題は別物です。

すべてのファイルをコンパイルするために私が行ったことはmake clean、実際にすべてのオブジェクトファイルを削除してからmake再度実行したことですが、今回はエラーが発生します:-

 ....
 mec/gen_crc32table > mec/crc32table.h
 mec/gen_crc32table: 1: mec/gen_crc32table: Syntax error: end of file unexpected    
 (expecting ")")
 make: *** [mec/crc32table.h] Error 2

内容を確認しcrc32table.hましたが、ファイルが空です。crc32table.hそのため、以前のコードのバックアップからコピーして、正常に実行されるようになりました。今、私はmake cleanそれをチェックするために実行して「make」をもう一度実行しますが、今回は正常に動作しています。

ここで何が謎なのかわからない?

これらの行は私が理解できないことをしていると思いますか?これについて私を助けてください。

crc32.o: mec/crc32table.h mec/crc32.c
$(CC) -o $@ -c -I. $(CFLAGS) mec/crc32.c

mec/crc32table.h: mec/gen_crc32table
mec/gen_crc32table > mec/crc32table.h 
4

1 に答える 1

1

問題はこのスニペットです:

mec/crc32table.h: mec/gen_crc32table
    mec/gen_crc32table > mec/crc32table.h 

gen_crc32table「コマンドがエラーで終了した場合はどうなりますか?」と自問してください。停止する(良い)が、破損したままにするcrc32table.h(悪い)。2つの選択肢:(i)パラメータgen_crc32tableを受け入れるように書き直します。-o(ii)シェルトリック。

(私)

mec/crc32table.h: mec/gen_crc32table
    mec/gen_crc32table -o mec/crc32table.h 

(ii)

mec/crc32table.h: mec/gen_crc32table
    mec/gen_crc32table >temp-file-with-an-obscure-name
    mv temp-file-with-an-obscure-name $@

エラーのmv場合は発生しません。gen_crc32table

于 2013-01-24T15:34:15.173 に答える