web-dev-qa-db-ja.com

VisualStudioで親から継承された特定の警告を無効にする方法は?

デフォルトで警告w44101が有効になっている大規模なコードベースで作業しているとします。プロジェクトに移動して、プロパティ-> C/C++->コマンドライン-> /w44101を右クリックすると追加オプションセクションに表示されます。

ソースコードの代わりに構成を変更して、この警告を無効にできるようにしたいと思います。プロパティ-> C/C++->すべてのオプション->特定の警告を無効にして4101に入れてみましたが、実際にはプロパティ-> C/C++->コマンドラインに/wd"4101"が生成されます。ただし、プロジェクトをコンパイルすると、4101警告がスローされます。 /wd"4101"/w44101が互いに打ち消し合わないのはなぜですか?

Visual Studio2015を搭載したWindows10を使用しています。この警告を無効にする正しい方法は何ですか?このコードベースの.slnファイルはCMakeによって生成されるため、提案されたソリューションをCMakeのある種の関数で呼び出すことができれば望ましいでしょう。

編集:私が取り組んでいるこのコードベースには、デフォルトで厳密なコンパイルフラグが設定されています。 /W4および/WXでコンパイルされます。また、追加のレベル4警告、例として、/w44101/w44062/w44191などがあります。

9
user3667089

あなたの質問では、警告_44101_(私が正しい場合は存在しませんか?)を有効にしていますが、警告_4101_を無効にしています:それはタイプミスですか?

編集:

あなたはあなたの質問のコメントでこれに答えました。読み取り MSDNドキュメント 、_/wlnnnn_オプションを使用すると、lで指定された警告番号の警告レベルをnnnnに設定できます。したがって、_/w44101_は、レベル_4101_で警告番号_4_を有効にします。


とにかく、プロジェクトがCMakeで生成されている場合、 _add_compile_options_ を使用して、現在のディレクトリ内のソースファイルのコンパイルにオプションを追加できます。これは、「グローバルスコープ」で警告_4101_を有効にするために使用できます。

_add_compile_options(/w4101)
_

次に、 _target_compile_definitions_ を使用して、ターゲットごとに無効にすることができます。

_add_library(foo ...)
target_compile_definitions(foo PUBLIC /wd4101)
_

編集:

あなたのコメントから、リポジトリのヘッドCMakeファイルには次のものがあります:

_set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /w44101")
_

そして、プロジェクトのCMakeファイルで次のことを実行しようとします。

_set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4101")
_

_/w44101_から_CMAKE_CXX_FLAGS_を削除する必要があります。これは、 string(REPLACE ...) を使用して_/w44101_を空の文字列に置き換えることで実現できます。

_string(REPLACE "/w44101" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
_

明らかに、最善の解決策は、警告を生成するコードを修正することです。 _4101_ は未使用の変数に関するもので、簡単に修正できます;)

(関連する質問を参照してください 「未使用の変数に関する警告を消音するにはどうすればよいですか?」

11
wasthishelpful