• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Enable warnings for the given target
2# Arguments:
3#   target: Non-interface library or executable
4#   level: Which warnings to add. Valid values: off, on, all, extra
5#   warningsAsErrors: Optional, ON to treat warnings as errors
6# Optionally can pass a bool as warnings-as-errors
7function(boost_add_warnings target level)
8  if(ARGC GREATER 2)
9    set(warningsAsErrors ${ARGV2})
10  else()
11    set(warningsAsErrors OFF)
12  endif()
13  set(allowed_levels off on all extra pedantic)
14  if(NOT level IN_LIST allowed_levels)
15    message(FATAL_ERROR "${level} is not a valid warning level (${allowed_levels})")
16  endif()
17  if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
18    set(supression -Wno-long-long)
19    set(warn_off -w)
20    set(warn_on  -Wall ${supression})
21    set(warn_all -Wall ${supression})
22    set(warn_extra -Wall -Wextra ${supression})
23    set(warn_pedantic -Wall -Wextra -pedantic ${supression})
24    set(werror -Werror)
25  elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
26    set(warn_off -w0)
27    foreach(_lvl IN ITEMS on all extra pedantic)
28      set(warn_${_lvl} -w1)
29    endforeach()
30    set(werror "")
31  elseif(MSVC)
32    set(warn_off /W0)
33    set(warn_on /W3)
34    foreach(_lvl IN ITEMS all extra pedantic)
35      set(warn_${_lvl} /W4)
36    endforeach()
37    set(werror /WX)
38  endif()
39  target_compile_options(${target} PRIVATE ${warn_${level}})
40  if(warningsAsErrors)
41    target_compile_options(${target} PRIVATE ${werror})
42  endif()
43endfunction()
44