AimRT/_deps/boost-src/libs/nowide/cmake/BoostAddWarnings.cmake
2025-01-12 20:41:24 +08:00

43 lines
1.4 KiB
CMake

# Enable warnings for the given target
# Arguments:
# target: Non-interface library or executable
# level: Which warnings to add. Valid values: off, on, all, extra
# warningsAsErrors: Optional, ON to treat warnings as errors
# Optionally can pass a bool as warnings-as-errors
function(boost_add_warnings target level)
if(ARGC GREATER 2)
set(warningsAsErrors ${ARGV2})
else()
set(warningsAsErrors OFF)
endif()
set(allowed_levels off on all extra pedantic)
if(NOT level IN_LIST allowed_levels)
message(FATAL_ERROR "${level} is not a valid warning level (${allowed_levels})")
endif()
if(MSVC)
set(warn_off /W0)
set(warn_on /W3)
foreach(_lvl IN ITEMS all extra pedantic)
set(warn_${_lvl} /W4)
endforeach()
set(werror /WX)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(warn_off -w)
set(warn_on -Wall)
set(warn_all -Wall)
set(warn_extra -Wall -Wextra)
set(warn_pedantic -Wall -Wextra -pedantic)
set(werror -Werror)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(warn_off -w0)
foreach(_lvl IN ITEMS on all extra pedantic)
set(warn_${_lvl} -w1)
endforeach()
set(werror "")
endif()
target_compile_options(${target} PRIVATE ${warn_${level}})
if(warningsAsErrors)
target_compile_options(${target} PRIVATE ${werror})
endif()
endfunction()