From 43179d6ea0e80903bb44b4bd7a8bf9d31f2de0a1 Mon Sep 17 00:00:00 2001 From: winsoft666 Date: Fri, 30 Jul 2021 17:50:02 +0800 Subject: [PATCH 1/3] 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 From df8452206a93ba044f2a171b767b3d7023fc0f85 Mon Sep 17 00:00:00 2001 From: winsoft666 Date: Fri, 30 Jul 2021 18:28:54 +0800 Subject: [PATCH 2/3] Set target output directory --- src/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fa12df1..a45969c 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -43,6 +43,13 @@ else() add_library(${PROJECT_NAME} STATIC ${SRC_FILES} ${HEAD_FILES}) endif() +# Set output directory +set_target_properties(${PROJECT_NAME} + PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) + target_include_directories(${PROJECT_NAME} PUBLIC ${LIBIPC_PROJECT_DIR}/include PRIVATE ${LIBIPC_PROJECT_DIR}/src From cc7b52ae8f49794579de6c00e647faec489df9c5 Mon Sep 17 00:00:00 2001 From: winsoft666 Date: Fri, 30 Jul 2021 18:37:52 +0800 Subject: [PATCH 3/3] Update INSTALL directory. --- src/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a45969c..b80a2aa 100755 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -63,5 +63,7 @@ endif() install( TARGETS ${PROJECT_NAME} - DESTINATION "lib" -) + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) \ No newline at end of file