Log4cxx、boostなどのライブラリを使用するプロジェクトがあり、そのライブラリのヘッダーは多くの(繰り返しの)警告を生成します。ライブラリインクルード(#include <some-header.h>)または特定のパスからのインクルードからの警告を抑制する方法はありますか?関連する情報が不明瞭になることなく、プロジェクトコードで通常どおり-Wallおよび/または-Wextraを使用したいと思います。現在、make出力でgrepを使用していますが、もっと良いものが欲しいです。
-isystem
の代わりに-I
を使用してライブラリヘッダーを含めることを試みることができます。これにより、それらは「システムヘッダー」になり、GCCはそれらの警告を報告しません。
CMakeを使用している場合は、include_directories
ヘッダーに対する警告を抑制するシンボルSYSTEM
を含めるディレクティブ。
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
プラグマを使用できます。例えば:
// 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
トリックを見つけました。ライブラリインクルードの場合、-Idir
の代わりに、メイクファイルで-isystem dir
を使用します。 GCCは、システムがそれらからの警告を含めて無視するため、ブーストなどを扱います。
#pragma
はコンパイラーへの指示です。 #includeの前に何かを設定し、後で無効にすることができます。
コマンドライン でも実行できます。
警告を無効にする に関する具体的な別のGCCページ。
ソースコード内で#pragmaを使用して、sound理由(コメントとして)を無効にする理由を提供するオプションを選択します警告。これは、ヘッダーファイルに関する推論を意味します。
GCCは classifying 警告タイプによってこれにアプローチします。それらを警告または無視するように分類できます。以前にリンクされた記事は、どの警告が無効にされる可能性があるかを示します。
注: attributes ;を使用して、特定の警告を防ぐためにソースコードを処理することもできます。ただし、これはGCCに非常に密接に結びついています。
注2:GCCはMicrosoftのコンパイラで使用されている pop/Pushインターフェース も使用します。Microsoftはこのインターフェースを介して警告を無効にします。私はそれが可能かどうかわからないので、これをさらに調査することをお勧めします。
プリコンパイル済みヘッダー を使用して試すことができます。警告は消えませんが、少なくともメインコンピレーションには表示されません。
システムヘッダーを明示的にオーバーライドする必要がある場合は、プラグマに制限されます。使用しているインクルードを確認するには、make depend
出力。
gcc> = 4.6の診断プッシュポップ も参照してください
以下を置く
#pragma GCC system_header
このファイル内の以下のすべてのコードのGCC警告をオフにします。