Wer*_*ght 104 cmake warning-level
如何使用CMake为项目(而不是整个解决方案)设置警告级别?应该在Visual Studio和GCC上工作.
我找到了各种选项,但大多数似乎不工作或与文档不一致.
mlo*_*kot 87
更新:这个答案早于现代CMake时代.每个理智的CMake用户都应该避免CMAKE_CXX_FLAGS直接摆弄并target_compile_options改为调用命令.检查mrts的答案,该答案提供了推荐的最佳实践.
你可以做类似的事情:
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()
Run Code Online (Sandbox Code Playgroud)
mrt*_*rts 58
在现代CMake中,以下效果很好:
if(MSVC)
target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
else()
target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror)
endif()
Run Code Online (Sandbox Code Playgroud)
替换${TARGET_NAME}为实际目标名称.-Werror是可选的,它会将所有警告变为错误.
小智 23
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}"
)
Run Code Online (Sandbox Code Playgroud)
Xcode的结果:
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSIONXcode属性(也就是构建设置 - > 警告 - > 可疑的隐式转换 - > YES)-WerrorMakefile gcc和clang:
-Wconversion,-Werror视觉工作室:
/WX,/w14244Jay*_*Jay 12
if (MSVC)
# warning level 4 and all warnings as errors
add_compile_options(/W4 /WX)
else()
# lots of warnings and all warnings as errors
add_compile_options(-Wall -Wextra -pedantic -Werror)
endif()
Run Code Online (Sandbox Code Playgroud)
GCC 和 Clang 共享这些标志,因此这应该涵盖所有 3 个。
这是我到目前为止找到的最佳解决方案(包括编译器检查):
if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
add_definitions(/W2)
endif()
Run Code Online (Sandbox Code Playgroud)
这将在Visual Studio中设置警告级别2.我认为-W2它也适用于GCC(未经测试).
来自@Williams的更新:应该是-WallGCC.
| 归档时间: |
|
| 查看次数: |
69541 次 |
| 最近记录: |