web-dev-qa-db-ja.com

CMakeで警告レベルを設定する方法は?

CMake?を使用して、プロジェクト(ソリューション全体ではない)に警告レベルを設定する方法Visual Studioおよび[〜#〜] gcc [〜#〜]で動作するはずです。

さまざまなオプションを見つけましたが、ほとんどが機能していないか、ドキュメントと一致していないようです。

94
Wernight

これが私がこれまでに見つけた最良の解決策です(コンパイラーチェックを含む)。

if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
    add_definitions(/W2)
endif()

これにより、Visual Studioで警告レベル2が設定されます。私は-W2 GCCでも動作します(テストなし)。

@Williamsからの更新:-Wall GCCの場合。

7
Wernight

更新:この回答は、モダンCMake時代より前のものです。すべての健全なCMakeユーザーは、CMAKE_CXX_FLAGSを直接いじるのを控え、代わりにtarget_compile_optionsコマンドを呼び出す必要があります。 mrts 'answer を確認してください。これは推奨されるベストプラクティスを示しています。

次のようなことができます:

if(MSVC)
  # Force to always compile with W4
  if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
    string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
  endif()
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
  # Update if necessary
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
endif()
84
mloskot

現代のCMakeでは、以下がうまく機能します。

_if(MSVC)
  target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
else()
  target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror)
endif()
_

_${TARGET_NAME}_を実際のターゲット名に置き換えます。 _-Werror_はオプションであり、すべての警告をエラーに変換します。

または、コメントの@aldoで示唆されているように、すべてのターゲットに適用する場合は、add_compile_options(...)を使用します。

43
mrts

いくつかの 私が書いたCMakeモジュール 実験的な cross-platfrom警告抑制

sugar_generate_warning_flags(
    target_compile_options
    target_properties
    ENABLE conversion
    TREAT_AS_ERRORS ALL
)

set_target_properties(
    foo
    PROPERTIES
    ${target_properties}
    COMPILE_OPTIONS
    "${target_compile_options}"
)

Xcodeの結果:

  • セットする CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION Xcode属性(別名ビルド設定->warnings->疑わしい暗黙の変換->[〜#〜] yes [〜#〜]
  • コンパイラフラグを追加:-Werror

Makefile gccおよびclang:

  • コンパイラフラグを追加します:-Wconversion-Werror

ビジュアルスタジオ:

  • コンパイラフラグを追加します:/WX/w14244

リンク集

23
user2288008