デフォルトで警告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
などがあります。
あなたの質問では、警告_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
_ は未使用の変数に関するもので、簡単に修正できます;)
(関連する質問を参照してください 「未使用の変数に関する警告を消音するにはどうすればよいですか?」 )