私はlog4cxx、boostなどのライブラリを使用しており、ヘッダが(反復的な)警告をたくさん生成しています。ライブラリのインクルードからの警告を抑制する方法はありますか(#include < some-header.h >)、または特定のパスからインクルードしていますか?私は関連する情報が不明瞭でなくても、プロジェクトコードに-Wallや-Wextraをいつものように使用したいと思います。私は現在、出力を行う際にgrepを使用していますが、何か改善が必要です。ライブラリヘッダーからのGCC警告を抑制する方法は?
答えて
-I
の代わりに-isystem
を使用してライブラリヘッダーを含めることをお勧めします。これはそれらを "システムヘッダー"にし、GCCは警告を報告しません。
precompiled headersを試すことができます。警告は消えませんが、少なくともあなたのメインコンパイルには表示されません。
これは実際には良い考えです。サードパーティのインクルードは毎日変更されません。 – AdSR
正確です。私はそれをLinuxであまり使っていませんが、Visual Studioでうまく動作します。 –
#pragma
は、コンパイラへの指示です。 #includeの前に何かを設定して後で無効にすることができます。
command lineでも行うことができます。
具体的にはdisabling warningsの別のGCCページ。
私は、ソースコード内の#pragmaのを使用して、その後、あなたが警告を無効にしている理由の(コメントなど) 音理由を提供するオプションのために行くだろう。これはヘッダーファイルについての推論を意味します。
GCCがこれに接近します。警告タイプはclassifyingです。あなたはそれらを警告または無視されるように分類できます。以前にリンクされた記事は、どの警告が無効になっているかを示します。
注:attributesを使用して特定の警告を防ぐために、ソースコードをマッサージすることもできます。しかし、これはGCCと非常に密接に結びついています。
注2:GCCでもmicrosoftのコンパイラで使用されているようにpop/push interfaceが使用されています。このインターフェイスでは、警告が無効になります。私はそれが可能かどうかわからないので、これをさらに調査することをお勧めします。
プラグマを考慮しましたが、ヘッダを含める前に警告を表示しない場合は、#includeの後に*以前の状態に戻すにはどうしたらいいですか?私はプロジェクトコードの警告を見たい(私はすでに数回は助けてくれた)が、コマンドラインから制御したい。 – AdSR
が追加されました。 –
これらの警告の理由が必要です。これらは、ライブラリを使用するコードのエラー、またはライブラリコード自体のエラーによって引き起こされます。最初のケースでは、コードを修正してください。 2番目のケースでは、ライブラリの使用を中止するか、またはFOSSコードであればそれを修正します。
私はこのトリックを見つけました。ライブラリの場合は、-Idirの代わりに-isystem dirをmakefileに使用してください。 GCCはシステムが含むようにブーストなどを処理し、それらからの警告を無視します。
プラグマを使用できます。たとえば:CMakeのを使用してそれらのために
// 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> = 4.6でのみ利用可能 – Caduchon
、あなたはそのようなヘッダに対する警告を抑制し、シンボルSYSTEM
を含めるようにinclude_directories
ディレクティブを変更することができます。
include_directories(SYSTEM "${LIB_DIR}/Include")
^^^^^^
ライブラリがCMakeの[include()](https://cmake.org/cmake/help/latest/command)で使用する '$ {LIBFOO_USE_FILE} /include.html)コマンド? – waldyrious
これは私の問題のほとんどの解決策であるようです。私は1)を持っています。バイナリターゲットは、2)ヘッダーのみのターゲット、3)外部ライブラリに依存しています。私は1&2の警告だけを受ける方法は知らない。アイデアはありますか? – knedlsepp
動作していないようです。私は 'easylogging ++'を使ったプロジェクトでこれを試しました。 'easylogging ++。h 'からの警告は、' SYSTEM'オプションに含まれていたとしても同じです。 – rbaleksandar
システムヘッダを明示的に上書きする必要がある場合は、プラグマに制限されます。 make depend
出力経由で使用しているものを確認できます。
も参照してください。diagnostic push-pop for gcc >= 4.6
- 1. gcc:抑制する[デフォルトで有効] C++コードからの警告
- 2. キャスト()からの警告メッセージを抑制する方法
- 3. gccを抑制する4.2.1プラグマによる警告
- 4. vim-latexの警告を抑制する方法は?
- 5. IDEA:スペルミスの警告を抑制する方法は?
- 6. DBIからの任意の警告/エラーメッセージを抑制する方法は?
- 7. rsOverlappingReportItemsの警告を抑制する
- 8. SASの警告文を抑制する
- 9. Microsoft Fakeの警告を抑制する
- 10. TYPO3:廃止予定の警告を抑制する方法?
- 11. ヘッダからインクルードされたファイルの警告を抑制する方法
- 12. ネイティブアンドロイドセッションタイムアウト警告を抑制する
- 13. Visual StudioでJSLint警告を抑制する方法2015
- 14. iOS SDKからValgrindの警告を抑制する
- 15. 抑制コンパイラの警告機能は
- 16. @dynamicなしで@property警告を抑制する方法はありますか?
- 17. GLSLで警告を抑制する方法はありますか?
- 18. ライブラリをロードする際の警告メッセージを抑制する方法は?
- 19. ビジュアルスタジオでのtlbimp警告の抑制
- 20. ASP.NET/VB.NETでのコンパイラ警告の抑制
- 21. 関数内でqplotのbinwidth警告を抑制する方法は?
- 22. Rspec:テスト実行時に警告や通知を抑制する方法は?
- 23. 名前空間ファイル全体のStyleCop警告を抑制する方法
- 24. GCCの警告
- 25. SuppressMessageAttribute;クラス内のすべての警告を抑制する
- 26. manage.py dumpdataの警告出力を抑制しますか?
- 27. Apache Tomcat stdoutの警告を抑制する
- 28. 未使用出力列のSSIS警告を抑制する
- 29. vb.netのファクトリメソッドで廃止された警告を抑制する
- 30. 抑制のAndroidManifest.xml minSdkVersionが関連する警告
これをXCodeで行う場合は、ターゲットビルド設定の「カスタムコンパイラフラグ」内の「他のC++フラグ」にシステムパスをスティックします。 –
潜在的な欠点は、いくつかのプラットフォームでg ++が自動的にシステムヘッダを 'extern" C "'にラップし、 '-isystem'パスにC++ヘッダーを' #includeすると、Cリンケージに関する奇妙なエラーが発生します。 –
+1は私に迷惑なブースト警告の問題を解決するのに役立ちましたhttp://stackoverflow.com/questions/35704753/warnings-from-boost – mrgloom