From 43179d6ea0e80903bb44b4bd7a8bf9d31f2de0a1 Mon Sep 17 00:00:00 2001 From: winsoft666 Date: Fri, 30 Jul 2021 17:50:02 +0800 Subject: [PATCH] Add USE_STATIC_CRT option to support static CRT(/MT). --- 3rdparty/gtest/CMakeLists.txt | 14 ++++++++++++++ CMakeLists.txt | 6 ++++++ demo/chat/CMakeLists.txt | 14 ++++++++++++++ demo/msg_que/CMakeLists.txt | 14 ++++++++++++++ src/CMakeLists.txt | 14 ++++++++++++++ test/CMakeLists.txt | 14 ++++++++++++++ 6 files changed, 76 insertions(+) diff --git a/3rdparty/gtest/CMakeLists.txt b/3rdparty/gtest/CMakeLists.txt index 77f0b58..68de47c 100644 --- a/3rdparty/gtest/CMakeLists.txt +++ b/3rdparty/gtest/CMakeLists.txt @@ -25,6 +25,20 @@ option( gtest_hide_internal_symbols "Build gtest with internal symbols hidden in shared libraries." OFF) + +if (MSVC AND USE_STATIC_CRT) + set(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() +endif() # Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). include(cmake/hermetic_build.cmake OPTIONAL) diff --git a/CMakeLists.txt b/CMakeLists.txt index 677f495..5399a90 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ project(cpp-ipc) option(LIBIPC_BUILD_TESTS "Build all of libipc's own tests." OFF) option(LIBIPC_BUILD_DEMOS "Build all of libipc's own demos." OFF) +option(USE_STATIC_CRT "Set to ON to build with static CRT on Windows (/MT)." OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_CXX_STANDARD 17) @@ -13,8 +14,13 @@ endif() set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) + set(LIBIPC_PROJECT_DIR ${PROJECT_SOURCE_DIR}) + +# Unicode Support +add_definitions(-DUNICODE -D_UNICODE) + add_subdirectory(src) if (LIBIPC_BUILD_TESTS) diff --git a/demo/chat/CMakeLists.txt b/demo/chat/CMakeLists.txt index c5bcea8..77850c9 100755 --- a/demo/chat/CMakeLists.txt +++ b/demo/chat/CMakeLists.txt @@ -1,5 +1,19 @@ project(chat) +if (MSVC AND USE_STATIC_CRT) + set(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() +endif() + file(GLOB SRC_FILES ./*.cpp) file(GLOB HEAD_FILES ./*.h) diff --git a/demo/msg_que/CMakeLists.txt b/demo/msg_que/CMakeLists.txt index da0de71..65ce4d3 100755 --- a/demo/msg_que/CMakeLists.txt +++ b/demo/msg_que/CMakeLists.txt @@ -1,5 +1,19 @@ project(msg_que) +if (MSVC AND USE_STATIC_CRT) + set(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() +endif() + include_directories( ${LIBIPC_PROJECT_DIR}/3rdparty) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 48ee436..fa12df1 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,20 @@ project(ipc) option(LIBIPC_BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF) +if (MSVC AND USE_STATIC_CRT) + set(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() +endif() + if(UNIX) file(GLOB SRC_FILES ${LIBIPC_PROJECT_DIR}/src/libipc/platform/*_linux.cpp) else() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4b695eb..6be27af 100755 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,5 +1,19 @@ project(test-ipc) +if (MSVC AND USE_STATIC_CRT) + set(CompilerFlags + CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + ) + foreach(CompilerFlag ${CompilerFlags}) + string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") + endforeach() +endif() + if(NOT MSVC) add_compile_options( -Wno-attributes