MS Visual Studio C++ コンパイラの -isystem
-
20-09-2019 - |
質問
私は通常、プログラミング時に多くの警告を有効にすることを好みます。ただし、一部のライブラリには、簡単に警告が発生するコードが含まれています (..、Python、Qt、..)。gcc でコンパイルする場合、-I の代わりに -isystem を使用するだけでそれを黙らせることができます。MS コンパイラで同じことを行うにはどうすればよいですか?#pragma という警告があることは知っていますが、コンパイラ固有のコードを随所に含まない解決策が欲しいです。特定の警告をオフにできることも知っていますが、それも私が望んでいることではありません。
ところで:isystem はこの質問のタグであるべきですが、それは許可されていませんでした。
まとめ:見たい 全て 私のコードからの警告、そして いいえ 外部コードからの警告。
解決
2017 年 8 月 17 日の時点では、これはまだ不可能のようです。
ここに機能リクエストを追加しました。
2018 年のアップデート:
この問題は現在修正済みとしてクローズされており、標準の MS VS インストールで利用可能です [ソース]。MS チームからのブログ投稿では新機能について説明しています [ここ].
MS のソリューションは柔軟です。のようにパスを使用して区別できるだけではありません。 --isystem
, 、ただし、たとえば、を使用するかどうかによっても異なります #include ""
または #include <>
. 。さまざまなカスタマイズ ポイントをすべて確認するには、このブログ投稿を読む価値があります。
最後に、MS VS プラットフォームでも警告が使用できるようになりました。
他のヒント
これが今/experimental:external /external:I system_include_path /external:W0
下に存在します。 https://blogs.msdn.microsoftを参照してください。より多くの詳細については、COM / vcblog / 12分の2017/13 /壊れ-警告 - 理論/ に。
MSがこれを拾ったことがない理由はありません手掛かり。 私たちは、<のhref = "https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headersに投票してみてください様-GCC-S」のrel = "nofollowを"> https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system -headers様のgcc-S の
いいえ、MSVCは-isystem
相当を持っていません。
/ CLからの出力の出力を見て? :
/ WD無効に警告のn
/私たちはエラーとしてn個の警告治療
/発行警告WO nはかつて
/セット警告レベルW 1-4用のn
これは、プロジェクト全体のための警告を無効にすることに注意してください。私はQtのを使用しているとき、私はむしろそれはの#pragma警告を無効にしてメインヘッダだ変えるだろうと、私はまだ私自身のソースのすべての警告を見ることができるように、再び最後に有効覚えています。
編集著者は彼の質問を編集し、更新の答え:コンパイラフラグを使用して警告なし警告とQtのコードを使用してコードを取得する方法はありません:どのようにあなたが 'されているものをコンパイラに伝えるしようとしていますあなたの」コード?
上記のフラグが同様にファイルレベルで適用することができるので、これはあなたがQtのヘッダが含まれているファイルのみのための警告を無効にできるようになるが、それは、のまだのは、あなたがいないことを意味しそのファイルに独自のコードのためにそれらを参照してください。
だから私は上記の答えに滞在。それは非常にきれいではありませんが、私はそれが唯一の方法だとかなり確信している:最初とQtヘッダ(S)の終わりに#pragmaを使用しています。どちらか(もっと醜い)Qtのヘッダを変更、またはこのような侵襲性の低い方法を選択します:
//your source/header file
#include "shutuppqt.h"
#include <QString>
#include "enableallwarnings.h"
たとえば "shutuppqt.h"
#ifdef MSVC
#pragma warning ( disable : 4222 ) //or whatever warning Qt emits
#else
//....
#endif
たとえば "enableallwarnings.h"
#ifdef MSVC
#pragma warning ( enable : 4222 ) //or default instead of enable
#else
//....
#endif