build: scope parameter added to set_warnings()

This commit is contained in:
Mateusz Pusz
2021-01-28 18:53:00 +01:00
parent df4fe0bc57
commit 8100b6c13d
2 changed files with 9 additions and 5 deletions

View File

@ -25,13 +25,17 @@
cmake_minimum_required(VERSION 3.2)
# Configure compiler warning level
function(set_warnings target)
function(set_warnings target scope)
option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" TRUE)
if(NOT TARGET ${target})
message(FATAL_ERROR "'${target}' is not a CMake target")
endif()
if(NOT (scope STREQUAL "PRIVATE" OR scope STREQUAL "PUBLIC" OR scope STREQUAL "INTERFACE"))
message(FATAL_ERROR "'${scope}' is not one of (PRIVATE, PUBLIC, INTERFACE)")
endif()
set(MSVC_WARNINGS
/W4 # Baseline reasonable warnings
/w14062 # enumerator 'identifier' in a switch of enum 'enumeration' is not handled
@ -101,11 +105,11 @@ function(set_warnings target)
if(MSVC)
string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" PARENT_SCOPE)
target_compile_options(${target} INTERFACE ${MSVC_WARNINGS})
target_compile_options(${target} ${scope} ${MSVC_WARNINGS})
elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
target_compile_options(${target} INTERFACE ${CLANG_WARNINGS})
target_compile_options(${target} ${scope} ${CLANG_WARNINGS})
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(${target} INTERFACE ${GCC_WARNINGS})
target_compile_options(${target} ${scope} ${GCC_WARNINGS})
else()
message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.")
endif()