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.