From 61ff2acc6960f2923b59e0c4a92fb4efe92be324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gallou?= Date: Wed, 18 Feb 2026 18:28:35 +0100 Subject: [PATCH] Fix and modernize CMake with MSVC and static runtime --- cmake/msvc-runtime.cmake | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/cmake/msvc-runtime.cmake b/cmake/msvc-runtime.cmake index 4233897..faa6dd8 100644 --- a/cmake/msvc-runtime.cmake +++ b/cmake/msvc-runtime.cmake @@ -1,36 +1,16 @@ macro(configure_msvc_runtime) + # Let possibility for user to define CMAKE_MSVC_RUNTIME_LIBRARY (if defined, OATPP_MSVC_LINK_STATIC_RUNTIME will be ignored) if(MSVC) - # Set compiler options. - set(variables - CMAKE_C_FLAGS - CMAKE_C_FLAGS_DEBUG - CMAKE_C_FLAGS_MINSIZEREL - CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS - CMAKE_CXX_FLAGS_DEBUG - CMAKE_CXX_FLAGS_MINSIZEREL - CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_RELWITHDEBINFO) - - if(OATPP_MSVC_LINK_STATIC_RUNTIME) - message(STATUS "MSVC: using statically-linked runtime (/MT and /MTd).") - foreach(variable ${variables}) - if(${variable} MATCHES "/MD") - string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}") - endif() - endforeach() + if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) + message(STATUS "MSVC: using runtime from provided CMAKE_MSVC_RUNTIME_LIBRARY (OATPP_MSVC_LINK_STATIC_RUNTIME option is ignored)") else() - message(STATUS "MSVC: using dynamically-linked runtime (/MD and /MDd).") - foreach(variable ${variables}) - if(${variable} MATCHES "/MT") - string(REGEX REPLACE "/MT" "/MD" ${variable} "${${variable}}") - endif() - endforeach() + if(OATPP_MSVC_LINK_STATIC_RUNTIME) + message(STATUS "MSVC: using statically-linked runtime (/MT and /MTd).") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + else() + message(STATUS "MSVC: using dynamically-linked runtime (/MD and /MDd).") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + endif() endif() - - foreach(variable ${variables}) - set(${variable} "${${variable}}" CACHE STRING "MSVC_${variable}" FORCE) - endforeach() endif() endmacro(configure_msvc_runtime) \ No newline at end of file