CMake之MSVC警告

禁用或启用警告

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
  $<$:/W4 /WX>
  $<$>:-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

How to set warning level in CMake? - Stack Overflow

你可能感兴趣的:(编程语言杂记,c++,cmake)