Mercurial > hg > orthanc
changeset 7146:0dd4240ea372 default tip
trying to enforce the /MT flag with MSVC
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Wed, 09 Sep 2026 18:23:13 +0200 |
| parents | a9a0d0455dce |
| children | |
| files | NEWS OrthancFramework/Resources/CMake/Compiler.cmake |
| diffstat | 2 files changed, 22 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Wed Sep 09 09:25:46 2026 +0200 +++ b/NEWS Wed Sep 09 18:23:13 2026 +0200 @@ -11,6 +11,7 @@ * Fixed a TCP socket leak when a DICOM association is received with an invalid calling AET. * Added more tolerance to invalid OW value representations +* Fix use of the static runtime under Visual Studio (/MT), which broke in 1.12.10 * New CMake options: - "THIRD_PARTY_DOWNLOADS_ROOT_URL" to specify another webserver to downloads the third-parties from. - "ORTHANC_SOURCES_DOWNLOADS_ROOT_URL" to specify another webserver to downloads the Orthanc sources from.
--- a/OrthancFramework/Resources/CMake/Compiler.cmake Wed Sep 09 09:25:46 2026 +0200 +++ b/OrthancFramework/Resources/CMake/Compiler.cmake Wed Sep 09 18:23:13 2026 +0200 @@ -79,21 +79,29 @@ endif() elseif (MSVC) - # Use static runtime under Visual Studio + # Use static runtime under Visual Studio (i.e., inject the "/MT" + # compiler flag to get the "MultiThreaded" static CRT) # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace # http://stackoverflow.com/a/6510446 - foreach(flag_var - CMAKE_C_FLAGS_DEBUG - CMAKE_CXX_FLAGS_DEBUG - CMAKE_C_FLAGS_RELEASE - CMAKE_CXX_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL - CMAKE_CXX_FLAGS_MINSIZEREL - CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS_RELWITHDEBINFO) - string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}") - endforeach(flag_var) + if(CMAKE_VERSION VERSION_LESS "3.15") + # Legacy approach: mangle the flags directly (pre-CMP0091) + foreach(flag_var + CMAKE_C_FLAGS_DEBUG + CMAKE_CXX_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_RELWITHDEBINFO) + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}") + endforeach(flag_var) + else() + # Modern approach: CMP0091 + CMAKE_MSVC_RUNTIME_LIBRARY (new in Orthanc 1.13.1) + cmake_policy(SET CMP0091 NEW) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") + endif() # Add /Zm256 compiler option to Visual Studio to fix PCH errors set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm256")
