4

したがって、ほとんどの場合、特定の C/C++ コードですべてのインクルードが正しいかどうかをテストしています。特定のディレクトリ (すべてのプログラムなど) のヘッダーを検索するための適切な -I オプションを使用した gcc/g++ 呼び出しを含むメイクファイルがあります。ソースをヘッダーにコンパイルしています。

ただし、インクルードされたディレクトリが正しくなく、未定義のヘッダーが表示された場合 (たとえば、foo.h に #include があり、見つからなかった場合)、gcc/g++ は、その foo.h ヘッダーのインクルードごとに一連のエラーを吐き出します。後でコンパイルする他のすべてのソースについて(そして、すでに -Werror -Wfatal-errors を使用して gcc/g++ を停止させています)。

だから、私の質問は簡単です.「そのようなファイルやディレクトリはありません」というタイプの最初のエラーが見つかった後、どのようにしてmakefileを停止させることができますか? ソースとソースをコンパイルし続けるのは本当に面倒で、すでに理解したエラーが繰り返されるだけで何百ものエラーが発生します。

4

3 に答える 3

3

言われたから続いているのでしょう。GNU make の次の 2 つのオプションを参照してください。

-k, --keep-going          Keep going when some targets can't be made.
-S, --no-keep-going, --stop
                          Turns off -k.
于 2012-10-22T09:29:43.353 に答える
3

ヘッダー ファイルを変数に入れ、その変数を依存関係として使用します。次のスニペットは、指定されたヘッダーが存在するまで何もビルドしません。

HEADERS=test.h other.h /usr/include/special.h

all: $(HEADERS) $(BINPROGS)

[... all other rules go here as usual ...]

*.h:
    echo found $@

「.h:」は、建物が始まる前に見つかった各ヘッダーを単純に出力します。ヘッダーが見つからない場合、メイクファイル自体が停止します (何かをコンパイルしようとする前に停止します)

それがあなたが望んでいたことだと思いますか?

于 2012-10-22T09:32:45.827 に答える
0

make スクリプトを実行する前に、エラー状態をチェックするシェル スクリプトを作成できます。

于 2012-10-22T09:26:56.723 に答える