152

log4cxx、boost などのライブラリを使用するプロジェクトがあり、そのヘッダーは多くの (反復的な) 警告を生成します。ライブラリ インクルード (つまり #include <some-header.h>) または特定のパスからのインクルードからの警告を抑制する方法はありますか? 関連情報が不明瞭になることなく、プロジェクトコードで通常どおり-Wallおよび/または-Wextraを使用したいと思います。現在、make 出力で grep を使用していますが、もっと良いものが欲しいです。

4

10 に答える 10

139

-isystemの代わりにを使用してライブラリヘッダーを含めることができます-I。これにより、それらは「システムヘッダー」になり、GCCはそれらの警告を報告しません。

于 2009-12-14T12:12:09.983 に答える
133

CMake を使用している場合は、include_directoriesディレクティブを変更して、そのSYSTEMようなヘッダーに対する警告を抑制するシンボルを含めることができます。

include_directories(SYSTEM "${LIB_DIR}/Include")
                    ^^^^^^
于 2014-10-10T10:54:47.197 に答える
62

プラグマを使用できます。例えば:

// save diagnostic state
#pragma GCC diagnostic push 

// turn off the specific warning. Can also use "-Wall"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>

// turn the warnings back on
#pragma GCC diagnostic pop
于 2012-11-21T11:46:40.560 に答える
30

コツを見つけました。makefileで-Idir使用する代わりに、ライブラリ インクルードの場合。-isystem dir次に、GCC はブーストなどをシステム インクルードとして扱い、それらからの警告を無視します。

于 2009-12-14T10:39:34.337 に答える
9

#pragmaコンパイラへの指示です。#include の前に何かを設定し、後で無効にすることができます。

コマンド ラインで実行することもできます。

特に警告の無効化に関する別の GCC ページ。

ソース コード内で #pragma を 使用し、警告を無効にする理由を (コメントとして)提供するオプションを選択します。これは、ヘッダー ファイルに関する推論を意味します。

GCC は、警告の種類を分類することでこれに取り組みます。それらを警告または無視するように分類できます。以前にリンクされた記事には、どの警告が無効になっている可能性があるかが示されています。

注: attributesを使用して、特定の警告を防ぐためにソース コードをマッサージすることもできます。ただし、これは GCC に非常に密接に結び付いています。

注 2: GCC は、Microsoft のコンパイラで使用されているpop/push インターフェイスも使用します。Microsoft は、このインターフェイスを介した警告を無効にします。可能かどうかさえわからないので、これをさらに調査することをお勧めします。

于 2009-12-08T13:46:12.770 に答える
4

プリコンパイル済みヘッダーの使用を試すことができます。警告はなくなりませんが、少なくともメインのコンパイルには表示されません。

于 2009-12-08T13:46:05.513 に答える
2

システム ヘッダーを明示的にオーバーライドする必要がある場合は、プラグマに制限されます。make depend出力を介して、使用しているインクルードを確認できます。

gcc >= 4.6 の診断プッシュポップも参照してください。

于 2015-02-09T14:17:16.247 に答える
-9

これらの警告には理由があるはずです。これらは、ライブラリを使用するコードのエラー、またはライブラリ コード自体のエラーが原因で発生します。最初のケースでは、コードを修正してください。2 番目のケースでは、ライブラリの使用を停止するか、FOSS コードの場合は修正します。

于 2009-12-08T13:48:43.373 に答える