回答:
の-isystem
代わりにを使用して、ライブラリヘッダーを含めることができ-I
ます。これはそれらを「システムヘッダー」にし、GCCはそれらの警告を報告しません。
extern "C"
するため#include
、-isystem
パスにC ++ヘッダーがある場合、C リンケージに関する奇妙なエラーが発生することです。
CMakeを使用している場合は、include_directories
ディレクティブを変更して、そのSYSTEM
ようなヘッダーに対する警告を抑制する記号を含めることができます。
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
easylogging++
、同じ大量の警告が表示easylogging++.h
されSYSTEM
ます。
プラグマを使用できます。例えば:
// 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
gcc
cl
も長年の能力があります... gcc
適応するのが少し遅い場合があります。
私はトリックを見つけました。makefile で-Idir
使用する代わりに、ライブラリインクルードの場合-isystem dir
。その後、GCCはブーストなどをシステムが含む警告として処理し、無視します。
#pragma
コンパイラーへの指示です。#includeの前に何かを設定し、後で無効にすることができます。
コマンドラインでも実行できますます。
特に警告の無効化に関する別のGCCページ。
ソースコード内で#pragmaを使用してから、サウンドを提供するオプションを選択します 、あなたが警告を無効にしている理由の(コメントなど)の理由を。これは、ヘッダーファイルについての推論を意味します。
GCCはこれを分類することによってこれに取り組みますは警告タイプをことでます。警告として分類することも、無視することもできます。以前にリンクされた記事には、無効にされている可能性のある警告が表示されます。
注:属性を使用して、ソースコードをマッサージして特定の警告を防ぐこともできます。ただし、これはGCCに非常に密接に結びついています。
注2:GCCは、Microsoftのコンパイラで使用されているpop / pushインターフェースも使用します。Microsoftは、このインターフェースを通じて警告を無効にします。それが可能かどうかさえわからないので、これをさらに調査することをお勧めします。
プリコンパイル済みヘッダーを使用してみてください。警告は消えませんが、少なくともメインの編集では表示されません。
-isystem
が、ヘッダーをコンパイルするには、コードの両方でそれを使用することを忘れない)
システムヘッダーを明示的にオーバーライドする必要がある場合は、プラグマに制限されます。使用しているインクルードを確認できますmake depend
出力ます。
gccの診断プッシュポップも参照してください> = 4.6
これらの警告には理由があるはずです。これらは、ライブラリを使用するコードのエラー、またはライブラリコード自体のエラーが原因で発生します。最初のケースでは、コードを修正します。2番目のケースでは、ライブラリの使用を停止するか、FOSSコードの場合は修正します。