diff --git a/CMakeLists.txt b/CMakeLists.txt index 71d7c922..9821daf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,22 +122,25 @@ if(MSVC) add_compile_options($<$:/wd4267>) # handle msvcrt setting being passed in CMAKE_C_FLAGS - if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) - # do not support other methods of setting this (it would be more conformant, tho) - message(FATAL_ERROR "please set msvcrt via CMAKE_C_FLAGS") - endif() - if(CMAKE_C_FLAGS MATCHES "[/-]MTd") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug") - elseif(CMAKE_C_FLAGS MATCHES "[/-]MDd") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") - elseif(CMAKE_C_FLAGS MATCHES "[/-]MT") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") - elseif(CMAKE_C_FLAGS MATCHES "[/-]MD") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") - endif() + if(CMAKE_C_FLAGS MATCHES "[/-]M[TD]d?") + # ensure CMAKE_MSVC_RUNTIME_LIBRARY is not already defined + if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) + message(FATAL_ERROR "please set the runtime library via either CMAKE_C_FLAGS or CMAKE_MSVC_RUNTIME_LIBRARY, not both") + endif() - # prevent the arg from occurring more than once (not a big deal, just to keep tidy) - string(REGEX REPLACE "[/-]M[TD]d?" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) + if(CMAKE_C_FLAGS MATCHES "[/-]MTd") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug") + elseif(CMAKE_C_FLAGS MATCHES "[/-]MDd") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") + elseif(CMAKE_C_FLAGS MATCHES "[/-]MT") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") + elseif(CMAKE_C_FLAGS MATCHES "[/-]MD") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") + endif() + + # prevent the arg from occurring more than once (not a big deal, just to keep tidy) + string(REGEX REPLACE "[/-]M[TD]d?" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) + endif() else() if(MINGW) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpmachine