3

autotools を使用して CPP プロジェクトを管理しています。コードをコンパイルすると、gcc には次のフラグがあります。-Wall -Werror

したがって、私のコードに警告がある場合、gcc はそれをエラーとして扱い、コンパイルは中断されます。

私のプロジェクトには、複数のファイルを生成する antlr3 も含まれています。生成されたファイルには、コンパイルを中断するいくつかの警告が含まれています。

error: unused variable ‘index21_49’
in CongerCQLLexer.c, line 20589, column 24
20587>                 ANTLR3_UINT32 LA21_49;
20588> 
20589>                 ANTLR3_MARKER index21_49;
20590> 
20591> 

error: unused variable ‘index21_131’
in CongerCQLLexer.c, line 20622, column 24
20620>                 ANTLR3_UINT32 LA21_131;
20621> 
20622>                 ANTLR3_MARKER index21_131;
20623> 
20624> 

生成されたファイルの警告を無効にする方法を知りたいですか? ありがとうございました。

4

2 に答える 2

1

答えは-Wall -Werror、ビルドにどのように取り組んでいるかによって大きく異なります。CFLAGSconfigure.acで直接 割り当てる場合、解決策はそれをやめることです。CFLAGSはユーザー変数であり、ユーザーのみが割り当てる必要があります。で設定している場合はAM_CFLAGS、代わりにを介して特定のファイルにのみ追加できますfoo_CFLAGS。ただし、-Wall -WerrorCFLAGSを支援することは、いくつかの理由で悪い考えです。その1つは、すべてのコンパイラがこれらのフラグを受け入れるわけではないということです。ビルドを「-Werror--unknownoption」で終了しますか?多くの(ほとんどの?)コンパイラは受け入れ-Wall -Werrorますが、重要なのは、ユーザーが使用しているコンパイラがわからず、-Werror有用であるか受け入れられるかさえわからず、ユーザーがこれらのフラグを設定する必要があるかどうかもわからないということです。ユーザーに決定させます。

Automakeは、構成時に特定の変換単位のフラグを定義するという点ではあまり細分性を提供しませんが、すべての非ビルドソースに使用される変数と、ビルドソースに使用される変数をユーザーが割り当てることができる変数を追加するのはかなり簡単です。 。CFLAGSを割り当てる代わりに、ユーザーはBUILT_CFLAGSを割り当てることができ、それらをfoo_CFLAGSに追加してfooの適切な値を得ることができます。通常、これに対する解決策は、何もせずにユーザーに必要な調整を行わせることです(つまり、ユーザーはCFLAGSで-Werrorを使用してビルドし、ビルドが失敗することを確認してから、-Werrorなしで再構築します)。

于 2012-04-23T18:34:27.407 に答える
1

ファイルごとに目的を達成するための最良の方法は、GCC プラグマを配置して、影響を受けるファイルの警告を無効にすることだと思います。詳細については、SO に関するこの質問/回答を参照してください。

https://stackoverflow.com/a/3394305/379897

于 2012-04-23T09:26:27.043 に答える