禁用或启用警告
set_target_properties(${target_name} PROPERTIES COMPILE_FLAGS "/wd4700")
或者
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4700")
或者
if(MSVC)
target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
else()
target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -Wpedantic -Werror)
endif()
或者
target_compile_options(${TARGET_NAME} PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror>
)
默认警告级别
CMakeLists.txt中 cmake 的最低版本要求会影响msvc的默认警告级别
在vs2022中 cmake 3.10 默认警告级别为 /W3,而cmake 3.15中默认警告级别为 /W1
也就是说下面两个要求默认警告级别不一致:
# 使用3.10版本时时默认waring level = /W3 cmake_minimum_required(VERSION 3.10) # 使用3.15版本时时默认waring level = /W1 cmake_minimum_required(VERSION 3.15)
CMake中最低版本要求是有最顶层CMake控制的,也就是说如调用者使用了高版本要求,此时可能会降低低版本要求CMake的警告级别,导致部分警告失效。
参考
https://learn.microsoft.com/en-us/cpp/build/reference/compiler-option-warning-level?view=msvc-170