Use CMake property to drive static linking

Using a newer CMake version allows us to make use of the
MSVC_RUNTIME_LIBRARY added in CMake 3.15, which handles static linking
of the runtime library with MSVC a lot simpler
This commit is contained in:
Lukas Dürrenberger 2021-10-18 17:45:30 +02:00 committed by Lukas Dürrenberger
parent 2f49f1ef92
commit 4970af8999
2 changed files with 15 additions and 17 deletions

View File

@ -207,17 +207,6 @@ if(SFML_OS_WINDOWS)
if(BUILD_SHARED_LIBS AND SFML_USE_STATIC_STD_LIBS) if(BUILD_SHARED_LIBS AND SFML_USE_STATIC_STD_LIBS)
message(FATAL_ERROR "BUILD_SHARED_LIBS and SFML_USE_STATIC_STD_LIBS cannot be used together") message(FATAL_ERROR "BUILD_SHARED_LIBS and SFML_USE_STATIC_STD_LIBS cannot be used together")
endif() endif()
# for VC++, we can apply it globally by modifying the compiler flags
if((SFML_COMPILER_MSVC OR (SFML_COMPILER_CLANG AND NOT MINGW)) AND SFML_USE_STATIC_STD_LIBS)
foreach(flag
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
if(${flag} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}")
endif()
endforeach()
endif()
endif() endif()
# setup Mac OS X stuff # setup Mac OS X stuff

View File

@ -115,20 +115,25 @@ macro(sfml_add_library module)
) )
target_sources(${target} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${target}.rc") target_sources(${target} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${target}.rc")
source_group("" FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}.rc") source_group("" FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}.rc")
else()
set_target_properties(${target} PROPERTIES DEBUG_POSTFIX -d) if (SFML_COMPILER_GCC OR SFML_COMPILER_CLANG)
endif()
if (SFML_OS_WINDOWS AND (SFML_COMPILER_GCC OR SFML_COMPILER_CLANG))
# on Windows + gcc/clang get rid of "lib" prefix for shared libraries, # on Windows + gcc/clang get rid of "lib" prefix for shared libraries,
# and transform the ".dll.a" suffix into ".a" for import libraries # and transform the ".dll.a" suffix into ".a" for import libraries
set_target_properties(${target} PROPERTIES PREFIX "") set_target_properties(${target} PROPERTIES PREFIX "")
set_target_properties(${target} PROPERTIES IMPORT_SUFFIX ".a") set_target_properties(${target} PROPERTIES IMPORT_SUFFIX ".a")
endif() endif()
else()
set_target_properties(${target} PROPERTIES DEBUG_POSTFIX -d)
endif()
else() else()
set_target_properties(${target} PROPERTIES DEBUG_POSTFIX -s-d) set_target_properties(${target} PROPERTIES DEBUG_POSTFIX -s-d)
set_target_properties(${target} PROPERTIES RELEASE_POSTFIX -s) set_target_properties(${target} PROPERTIES RELEASE_POSTFIX -s)
set_target_properties(${target} PROPERTIES MINSIZEREL_POSTFIX -s) set_target_properties(${target} PROPERTIES MINSIZEREL_POSTFIX -s)
set_target_properties(${target} PROPERTIES RELWITHDEBINFO_POSTFIX -s) set_target_properties(${target} PROPERTIES RELWITHDEBINFO_POSTFIX -s)
if (SFML_USE_STATIC_STD_LIBS)
set_property(TARGET ${target} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
endif() endif()
# set the version and soversion of the target (for compatible systems -- mostly Linuxes) # set the version and soversion of the target (for compatible systems -- mostly Linuxes)
@ -276,6 +281,10 @@ macro(sfml_add_example target)
add_executable(${target} ${target_input}) add_executable(${target} ${target_input})
endif() endif()
if (SFML_USE_STATIC_STD_LIBS)
set_property(TARGET ${target} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
set_target_warnings(${target}) set_target_warnings(${target})
# set the debug suffix # set the debug suffix