mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-07 22:30:13 -06:00
Replace our hard-coded defaults for `/MD` and `/MDd` with a first-class abstraction to select the runtime library from an enumeration of logical names. We've long hesitated to do this because the idea of "runtime library selection" touches on related concepts on several platforms. Avoid that scope creep by simply defining an abstraction that applies only when targeting the MSVC ABI on Windows. Removing the old default flags requires a policy because existing projects may rely on string processing to edit them and choose a runtime library under the old behavior. Add policy CMP0091 to provide compatibility. Fixes: #19108
38 lines
981 B
CMake
38 lines
981 B
CMake
enable_language(C)
|
|
|
|
cmake_policy(GET CMP0091 cmp0091)
|
|
if(cmp0091 STREQUAL "NEW")
|
|
if(NOT CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
|
|
message(SEND_ERROR "CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT not set under NEW behavior")
|
|
endif()
|
|
else()
|
|
if(CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT)
|
|
message(SEND_ERROR "CMAKE_MSVC_RUNTIME_LIBRARY_DEFAULT is set under OLD behavior")
|
|
endif()
|
|
endif()
|
|
|
|
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
|
|
if(CMAKE_C_FLAGS_DEBUG MATCHES "[/-]MDd( |$)")
|
|
set(have_MDd 1)
|
|
else()
|
|
set(have_MDd 0)
|
|
endif()
|
|
if(CMAKE_C_FLAGS_RELEASE MATCHES "[/-]MD( |$)")
|
|
set(have_MD 1)
|
|
else()
|
|
set(have_MD 0)
|
|
endif()
|
|
if(cmp0091 STREQUAL "NEW")
|
|
if(have_MDd OR have_MD)
|
|
message(SEND_ERROR "Have a -MD* flag under NEW behavior.")
|
|
endif()
|
|
else()
|
|
if(NOT (have_MDd AND have_MD))
|
|
message(SEND_ERROR "Do not have -MD* flags under OLD behavior.")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
set(CMAKE_MSVC_RUNTIME_LIBRARY BogusValue)
|
|
add_library(foo empty.c)
|