CMake?を使用して、プロジェクト(ソリューション全体ではない)に警告レベルを設定する方法Visual Studioおよび[〜#〜] gcc [〜#〜]で動作するはずです。
さまざまなオプションを見つけましたが、ほとんどが機能していないか、ドキュメントと一致していないようです。
これが私がこれまでに見つけた最良の解決策です(コンパイラーチェックを含む)。
if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
add_definitions(/W2)
endif()
これにより、Visual Studioで警告レベル2が設定されます。私は-W2
GCCでも動作します(テストなし)。
@Williamsからの更新:-Wall
GCCの場合。
更新:この回答は、モダン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()
現代の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(...)
を使用します。
いくつかの 私が書いた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