From 8100b6c13d864f2896cf776c150cb0f920e719d7 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Thu, 28 Jan 2021 18:53:00 +0100 Subject: [PATCH] build: `scope` parameter added to `set_warnings()` --- CMakeLists.txt | 2 +- cmake/warnings.cmake | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 00514deb..275065dd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,7 @@ add_subdirectory(src) # set restrictive compilation warnings include(warnings) -set_warnings(mp-units) +set_warnings(mp-units INTERFACE) # add usage example add_subdirectory(example) diff --git a/cmake/warnings.cmake b/cmake/warnings.cmake index 9de6cf6a..e810146b 100644 --- a/cmake/warnings.cmake +++ b/cmake/warnings.cmake @@ -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()