HomeBlogMagic

CMake MSVC static runtimes und warning level 4

Immer wieder brauch ich für kleinere Projekte die Option die Runtimes static zu linken. Zudem kompiliere ich immer mir Warning Level 4.

Dafür habe ich in CMake folgendes Makro geschrieben:

###############################################################################
# CompilerSettings:
#  - W4     (Warning level 4)
#  - MTd/MT (Static runtime)
###############################################################################
macro(MakeStatic)
  set ( CompilerFlags
          CMAKE_CXX_FLAGS
          CMAKE_CXX_FLAGS_DEBUG
          CMAKE_CXX_FLAGS_RELEASE
          CMAKE_CXX_FLAGS_RELWITHDEBINFO
          CMAKE_CXX_FLAGS_MINSIZEREL
          CMAKE_C_FLAGS
          CMAKE_C_FLAGS_DEBUG
          CMAKE_C_FLAGS_RELEASE
          CMAKE_C_FLAGS_RELWITHDEBINFO
          CMAKE_C_FLAGS_MINSIZEREL
      )
  # Enable Warning Level 4
  foreach(CompilerFlag ${CompilerFlags})
    if(${CompilerFlag} MATCHES "/W[0-4]")
      string(REPLACE "/W0" "/W4" ${CompilerFlag} "${${CompilerFlag}}")
      string(REPLACE "/W1" "/W4" ${CompilerFlag} "${${CompilerFlag}}")
      string(REPLACE "/W2" "/W4" ${CompilerFlag} "${${CompilerFlag}}")
      string(REPLACE "/W3" "/W4" ${CompilerFlag} "${${CompilerFlag}}")
    else()
      set(${CompilerFlag} "${${CompilerFlag}} /W4")
    endif()
    if("${CompilerFlag} " MATCHES "DEBUG ")
      set(${CompilerFlag} "${${CompilerFlag}} /MTd")
    else()
      set(${CompilerFlag} "${${CompilerFlag}} /MT")
    endif()
  endforeach()
endmacro()

Das Makro kann vor jedem Projekt, oder Global, angewendet werden.

Permalink: https://adirmeier.de/Blog/ID_390
Tags: Blog, C/C++, cmake, msvcvon am 2022-01-12