From 10ef5c70bf1a4b8525e046ea8ff6495d271fc6c3 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Tue, 18 Feb 2025 08:45:02 +0100 Subject: [PATCH 01/13] Initial solution, built on the previous solution. Tested on Windows. --- CMakeLists.txt | 84 +++++++++++++++++--------------------------------- 1 file changed, 29 insertions(+), 55 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bdf7ee4..eab58bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,35 @@ cmake_minimum_required(VERSION 3.8) -project(qualisys_cpp_sdk) +project(qualisys_cpp_sdk VERSION 1.0.0) option(${PROJECT_NAME}_BUILD_EXAMPLES "Build examples" OFF) option(${PROJECT_NAME}_BUILD_TESTS "Build tests" OFF) +option(${PROJECT_NAME}_BUILD_SHARED "Build shared library" OFF) +option(${PROJECT_NAME}_BUILD_SHARED_VERSIONED "Build shared library with version suffix" OFF) + +# Define library type +if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) + set(LIB_TYPE SHARED) +else() + set(LIB_TYPE STATIC) +endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") +# Ensure TinyXML2 is built correctly (STATIC or SHARED) set(tinyxml2_BUILD_TESTING OFF) +if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) + set(tinyxml2_SHARED ON) +else() + set(tinyxml2_SHARED OFF) +endif() add_subdirectory(external/tinyxml2) -add_library(${PROJECT_NAME} +# Enable Position Independent Code for shared libraries +if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() + +add_library(${PROJECT_NAME} ${LIB_TYPE} Network.cpp RTPacket.cpp RTProtocol.cpp @@ -25,6 +45,7 @@ target_include_directories(${PROJECT_NAME} PUBLIC $ ) +# Windows-specific linking if(WIN32) target_link_libraries(${PROJECT_NAME} PUBLIC @@ -32,8 +53,8 @@ if(WIN32) $<$:ws2_32 iphlpapi> ) endif() -target_link_libraries(${PROJECT_NAME} PRIVATE tinyxml2::tinyxml2) +target_link_libraries(${PROJECT_NAME} PRIVATE tinyxml2::tinyxml2) # Enable C++14 target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_14) @@ -41,61 +62,14 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF - DEBUG_POSTFIX "-d" ) -# ----------- INSTALL & EXPORT ----------- - -include(GNUInstallDirs) - -set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}) - -install(EXPORT ${PROJECT_NAME}Targets - FILE ${PROJECT_NAME}Targets.cmake - DESTINATION ${ConfigPackageLocation} -) - -include(CMakePackageConfigHelpers) -configure_package_config_file(${PROJECT_NAME}Config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${ConfigPackageLocation} - PATH_VARS CMAKE_INSTALL_INCLUDEDIR -) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake - DESTINATION ${ConfigPackageLocation} -) - -# 'make install' to the correct locations (provided by GNUInstallDirs). -install( - TARGETS ${PROJECT_NAME} - EXPORT ${PROJECT_NAME}Targets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # This is for Windows - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} -) - -# Copy along headers -set(INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}") -install( - CODE "file( GLOB HEADERS \"${CMAKE_CURRENT_SOURCE_DIR}/*.h*\" )" - CODE "file( INSTALL \${HEADERS} DESTINATION \"${INSTALL_INCLUDE_DIR}\" )" -) - -# ----------- EXAMPLES ----------- - -# example: RigidBodyStreaming -if (${PROJECT_NAME}_BUILD_EXAMPLES) - add_executable(RigidBodyStreaming - RigidBodyStreaming/RigidBodyStreaming.cpp - ) - target_link_libraries(RigidBodyStreaming - qualisys_cpp_sdk - tinyxml2 - ) -endif () +# Apply versioning suffix if shared and requested +if(${PROJECT_NAME}_BUILD_SHARED_VERSIONED) + set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") +endif() +# ----------- TESTS (Ensure Doctest is Not Broken) ----------- if(${PROJECT_NAME}_BUILD_TESTS) enable_testing() add_subdirectory(Tests) From 47edd0b485c9393b35a166ce8d93728cb8956305 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Tue, 18 Feb 2025 08:47:47 +0100 Subject: [PATCH 02/13] Updated comments, reintroduced previously removed code. --- CMakeLists.txt | 54 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eab58bf..f9938d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") -# Ensure TinyXML2 is built correctly (STATIC or SHARED) +# TinyXML2 set(tinyxml2_BUILD_TESTING OFF) if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) set(tinyxml2_SHARED ON) @@ -69,6 +69,58 @@ if(${PROJECT_NAME}_BUILD_SHARED_VERSIONED) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") endif() +# ----------- INSTALL & EXPORT ----------- + +include(GNUInstallDirs) + +set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}) + +install(EXPORT ${PROJECT_NAME}Targets + FILE ${PROJECT_NAME}Targets.cmake + DESTINATION ${ConfigPackageLocation} +) + +include(CMakePackageConfigHelpers) +configure_package_config_file(${PROJECT_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${ConfigPackageLocation} + PATH_VARS CMAKE_INSTALL_INCLUDEDIR +) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + DESTINATION ${ConfigPackageLocation} +) + +# 'make install' to the correct locations (provided by GNUInstallDirs). +install( + TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # This is for Windows + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} +) + +# Copy along headers +set(INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}") +install( + CODE "file( GLOB HEADERS \"${CMAKE_CURRENT_SOURCE_DIR}/*.h*\" )" + CODE "file( INSTALL \${HEADERS} DESTINATION \"${INSTALL_INCLUDE_DIR}\" )" +) + +# ----------- EXAMPLES ----------- + +# example: RigidBodyStreaming +if (${PROJECT_NAME}_BUILD_EXAMPLES) + add_executable(RigidBodyStreaming + RigidBodyStreaming/RigidBodyStreaming.cpp + ) + target_link_libraries(RigidBodyStreaming + qualisys_cpp_sdk + tinyxml2 + ) +endif () + # ----------- TESTS (Ensure Doctest is Not Broken) ----------- if(${PROJECT_NAME}_BUILD_TESTS) enable_testing() From 75670dd0ea2ac1867d30060bb08ff0af9e75a2d5 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Tue, 18 Feb 2025 08:49:54 +0100 Subject: [PATCH 03/13] Remove unnecessary comment. --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9938d8..27adc4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,7 +121,6 @@ if (${PROJECT_NAME}_BUILD_EXAMPLES) ) endif () -# ----------- TESTS (Ensure Doctest is Not Broken) ----------- if(${PROJECT_NAME}_BUILD_TESTS) enable_testing() add_subdirectory(Tests) From 8e73adb12b7663b127059011accf9f9d55552ca8 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Tue, 18 Feb 2025 09:52:03 +0100 Subject: [PATCH 04/13] Move 'independent code' line above tinyxml2 code. --- CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 27adc4e..a472401 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,11 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") +# Enable Position Independent Code for shared libraries +if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() + # TinyXML2 set(tinyxml2_BUILD_TESTING OFF) if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) @@ -24,11 +29,6 @@ else() endif() add_subdirectory(external/tinyxml2) -# Enable Position Independent Code for shared libraries -if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() - add_library(${PROJECT_NAME} ${LIB_TYPE} Network.cpp RTPacket.cpp From be4a362f5b65eb7a0b19f18f13be8c92fbafaa9e Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Tue, 18 Feb 2025 09:59:42 +0100 Subject: [PATCH 05/13] Add default-build as 'release' if not specified. --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a472401..bc1f558 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,11 @@ option(${PROJECT_NAME}_BUILD_TESTS "Build tests" OFF) option(${PROJECT_NAME}_BUILD_SHARED "Build shared library" OFF) option(${PROJECT_NAME}_BUILD_SHARED_VERSIONED "Build shared library with version suffix" OFF) +# Default to Release if not set +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build: None, Debug, Release, RelWithDebInfo, MinSizeRel.") +endif() + # Define library type if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) set(LIB_TYPE SHARED) From a4e6fb42c3131d587a6b6434b5284d9a82b81cab Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Tue, 18 Feb 2025 10:10:15 +0100 Subject: [PATCH 06/13] Update to use correct 'tinyxml2_SHARED_LIBS' tag. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bc1f558..5f70f7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,9 +28,9 @@ endif() # TinyXML2 set(tinyxml2_BUILD_TESTING OFF) if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) - set(tinyxml2_SHARED ON) + set(tinyxml2_SHARED_LIBS ON) else() - set(tinyxml2_SHARED OFF) + set(tinyxml2_SHARED_LIBS OFF) endif() add_subdirectory(external/tinyxml2) From 6443a844dd8559a74a784e53680e55b2b19a350e Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Wed, 19 Feb 2025 13:31:17 +0100 Subject: [PATCH 07/13] Updated CMakeList.txt files so that we can run tests when building as dynamic, also made tinyxml2 always build as static. --- CMakeLists.txt | 29 ++++++++++++++++++++++++----- Tests/CMakeLists.txt | 23 +++++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f70f7f..e46670a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,11 +27,6 @@ endif() # TinyXML2 set(tinyxml2_BUILD_TESTING OFF) -if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) - set(tinyxml2_SHARED_LIBS ON) -else() - set(tinyxml2_SHARED_LIBS OFF) -endif() add_subdirectory(external/tinyxml2) add_library(${PROJECT_NAME} ${LIB_TYPE} @@ -69,6 +64,28 @@ set_target_properties(${PROJECT_NAME} CXX_EXTENSIONS OFF ) +if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) + if(WIN32) + set_target_properties(${PROJECT_NAME} PROPERTIES + WINDOWS_EXPORT_ALL_SYMBOLS ON + ) + endif() + + if(NOT MSVC) + set_target_properties(${PROJECT_NAME} PROPERTIES + CMAKE_CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON + ) + endif() + + if (UNIX) + set_target_properties(${PROJECT_NAME} PROPERTIES + BUILD_RPATH "$ORIGIN" + INSTALL_RPATH "$ORIGIN" + ) + endif() +endif() + # Apply versioning suffix if shared and requested if(${PROJECT_NAME}_BUILD_SHARED_VERSIONED) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") @@ -129,4 +146,6 @@ endif () if(${PROJECT_NAME}_BUILD_TESTS) enable_testing() add_subdirectory(Tests) + set(${PROJECT_NAME}_BUILD_SHARED ${qualisys_cpp_sdk_BUILD_SHARED} CACHE BOOL "Build shared library") + set(${PROJECT_NAME}_BUILD_SHARED_VERSIONED ${qualisys_cpp_sdk_BUILD_SHARED_VERSIONED} CACHE BOOL "Build shared library with version suffix") endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index b4a1658..a1d9236 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -35,6 +35,29 @@ target_link_libraries(${PROJECT_NAME} tinyxml2 ) +# Ensure if shared library, that it's found at runtime +if(qualisys_cpp_sdk_BUILD_SHARED OR qualisys_cpp_sdk_BUILD_SHARED_VERSIONED) + target_compile_definitions(${PROJECT_NAME} PRIVATE QUALISYS_SDK_SHARED) + + if (UNIX) + set_target_properties(${PROJECT_NAME} PROPERTIES + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "$ORIGIN" + ) + elseif(WIN32) + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "$" + "$" + ) + else() + set_target_properties(${PROJECT_NAME} PROPERTIES + BUILD_RPATH "$ORIGIN" + INSTALL_RPATH "$ORIGIN" + ) + endif() +endif() + target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17) if(MSVC) From c40c6cf61e9acba0e0cb5f47f8a3c5e38b491b45 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Wed, 19 Feb 2025 13:48:53 +0100 Subject: [PATCH 08/13] Update Windows-specific linking to be less strict so that Clang has access to required code. --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e46670a..f165bd7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,8 +49,7 @@ target_include_directories(${PROJECT_NAME} PUBLIC if(WIN32) target_link_libraries(${PROJECT_NAME} PUBLIC - $<$:ws2_32.lib iphlpapi.lib> - $<$:ws2_32 iphlpapi> + ws2_32 iphlpapi ) endif() From 1ddee09a21c83a6b85dff25e4487a8c618e76661 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Thu, 20 Feb 2025 09:34:24 +0100 Subject: [PATCH 09/13] Remove tinyxml2 block that should have been removed in merge. --- CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ec48ec2..225b1c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,10 +25,6 @@ if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() -# TinyXML2 -set(tinyxml2_BUILD_TESTING OFF) -add_subdirectory(external/tinyxml2) - add_library(${PROJECT_NAME} ${LIB_TYPE} Network.cpp RTPacket.cpp From 4624836cbb6f52622237b2659080ae952c6c1b6b Mon Sep 17 00:00:00 2001 From: qjgn <45095781+qjgn@users.noreply.github.com> Date: Thu, 20 Feb 2025 11:05:44 +0100 Subject: [PATCH 10/13] Github actions: Build shared and shared versioned (#119) * Added cmake parameter qualisys_cpp_sdk_OUTPUT_TYPE Replaced qualisys_cpp_sdk_BUILD_SHARED and qualisys_cpp_sdk_BUILD_SHARED_VERSIONED with qualisys_cpp_sdk_OUTPUT_TYPE * Added output_type to build actions --- .github/workflows/cmake-multi-platform.yml | 3 +- CMakeLists.txt | 34 ++++++++++++---------- Tests/CMakeLists.txt | 2 +- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 38699ca..319c6fa 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -24,6 +24,7 @@ jobs: os: [ubuntu-latest, windows-latest] build_type: [Release] c_compiler: [gcc, clang, cl] + output_type: [STATIC, SHARED, SHARED_VERSIONED] include: # Windows + MSVC - os: windows-latest @@ -56,7 +57,7 @@ jobs: - name: Configure CMake # Single-line command works on both Windows (PowerShell) & Linux (Bash). - run: cmake -S . -B build -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -Dqualisys_cpp_sdk_BUILD_TESTS=ON + run: cmake -S . -B build -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -Dqualisys_cpp_sdk_OUTPUT_TYPE=${{ matrix.output_type}} -Dqualisys_cpp_sdk_BUILD_TESTS=ON - name: Build # On Windows + MSVC (multi-config generator), --config picks Release/Debug. diff --git a/CMakeLists.txt b/CMakeLists.txt index 225b1c3..3048da4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,27 +3,30 @@ project(qualisys_cpp_sdk VERSION 1.0.0) option(${PROJECT_NAME}_BUILD_EXAMPLES "Build examples" OFF) option(${PROJECT_NAME}_BUILD_TESTS "Build tests" OFF) -option(${PROJECT_NAME}_BUILD_SHARED "Build shared library" OFF) -option(${PROJECT_NAME}_BUILD_SHARED_VERSIONED "Build shared library with version suffix" OFF) -# Default to Release if not set -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build: None, Debug, Release, RelWithDebInfo, MinSizeRel.") +if(NOT DEFINED ${PROJECT_NAME}_OUTPUT_TYPE) + set(${PROJECT_NAME}_OUTPUT_TYPE "STATIC") endif() -# Define library type -if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) +if(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "STATIC") + message(STATUS "Building a static library.") + set(LIB_TYPE STATIC) + set(CMAKE_POSITION_INDEPENDENT_CODE OFF) +elseif(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED") + message(STATUS "Building a shared library.") + set(LIB_TYPE SHARED) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +elseif(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED_VERSIONED") + message(STATUS "Building a versioned shared library.") set(LIB_TYPE SHARED) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) else() - set(LIB_TYPE STATIC) + message(FATAL_ERROR "Invalid ${PROJECT_NAME}_OUTPUT_TYPE " ${${PROJECT_NAME}_OUTPUT_TYPE}) endif() + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") -# Enable Position Independent Code for shared libraries -if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() add_library(${PROJECT_NAME} ${LIB_TYPE} Network.cpp @@ -61,7 +64,7 @@ set_target_properties(${PROJECT_NAME} CXX_EXTENSIONS OFF ) -if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) +if(LIB_TYPE STREQUAL SHARED) if(WIN32) set_target_properties(${PROJECT_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON @@ -84,7 +87,7 @@ if(${PROJECT_NAME}_BUILD_SHARED OR ${PROJECT_NAME}_BUILD_SHARED_VERSIONED) endif() # Apply versioning suffix if shared and requested -if(${PROJECT_NAME}_BUILD_SHARED_VERSIONED) +if(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED_VERSIONED") set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") endif() @@ -142,6 +145,5 @@ endif () if(${PROJECT_NAME}_BUILD_TESTS) enable_testing() add_subdirectory(Tests) - set(${PROJECT_NAME}_BUILD_SHARED ${qualisys_cpp_sdk_BUILD_SHARED} CACHE BOOL "Build shared library") - set(${PROJECT_NAME}_BUILD_SHARED_VERSIONED ${qualisys_cpp_sdk_BUILD_SHARED_VERSIONED} CACHE BOOL "Build shared library with version suffix") + set(${PROJECT_NAME}_OUTPUT_TYPE ${qualisys_cpp_sdk_OUTPUT_TYPE} CACHE BOOL "qualisys_cpp_sdk build type") endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 563b292..aa2ae51 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -38,7 +38,7 @@ target_link_libraries(${PROJECT_NAME} ) # Ensure if shared library, that it's found at runtime -if(qualisys_cpp_sdk_BUILD_SHARED OR qualisys_cpp_sdk_BUILD_SHARED_VERSIONED) +if(NOT qualisys_cpp_sdk_OUTPUT_TYPE STREQUAL "STATIC") target_compile_definitions(${PROJECT_NAME} PRIVATE QUALISYS_SDK_SHARED) if (UNIX) From 5716b0a435c46ac3bfd43c7cf84a91997e81c0a1 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Thu, 20 Feb 2025 11:17:36 +0100 Subject: [PATCH 11/13] Add quotation marks for the sake of consistency. --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3048da4..a2a98f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,15 +10,15 @@ endif() if(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "STATIC") message(STATUS "Building a static library.") - set(LIB_TYPE STATIC) + set(LIB_TYPE "STATIC") set(CMAKE_POSITION_INDEPENDENT_CODE OFF) elseif(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED") message(STATUS "Building a shared library.") - set(LIB_TYPE SHARED) + set(LIB_TYPE "SHARED") set(CMAKE_POSITION_INDEPENDENT_CODE ON) elseif(${PROJECT_NAME}_OUTPUT_TYPE STREQUAL "SHARED_VERSIONED") message(STATUS "Building a versioned shared library.") - set(LIB_TYPE SHARED) + set(LIB_TYPE "SHARED") set(CMAKE_POSITION_INDEPENDENT_CODE ON) else() message(FATAL_ERROR "Invalid ${PROJECT_NAME}_OUTPUT_TYPE " ${${PROJECT_NAME}_OUTPUT_TYPE}) @@ -64,7 +64,7 @@ set_target_properties(${PROJECT_NAME} CXX_EXTENSIONS OFF ) -if(LIB_TYPE STREQUAL SHARED) +if(LIB_TYPE STREQUAL "SHARED") if(WIN32) set_target_properties(${PROJECT_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON From 489d87e8bd771eaf83d11f2ba509827bfd583f79 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Thu, 20 Feb 2025 13:07:22 +0100 Subject: [PATCH 12/13] Remove if-win32 check, add check to library includes directly. --- CMakeLists.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2a98f2..17ca45f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,12 +49,11 @@ target_include_directories(${PROJECT_NAME} ) # Windows-specific linking -if(WIN32) - target_link_libraries(${PROJECT_NAME} - PUBLIC - ws2_32 iphlpapi - ) -endif() +target_link_libraries(${PROJECT_NAME} + PUBLIC + $<$:ws2_32> + $<$:iphlpapi> +) # Enable C++14 target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_14) From 9f8ce1f3624e9e79ccd89d84c1f653a1ca3b2f28 Mon Sep 17 00:00:00 2001 From: Oliver Glandberger Date: Thu, 20 Feb 2025 13:09:43 +0100 Subject: [PATCH 13/13] Remove if-win32 check, add check to library includes directly. --- CMakeLists.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 17ca45f..2a2c5f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,10 +24,8 @@ else() message(FATAL_ERROR "Invalid ${PROJECT_NAME}_OUTPUT_TYPE " ${${PROJECT_NAME}_OUTPUT_TYPE}) endif() - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") - add_library(${PROJECT_NAME} ${LIB_TYPE} Network.cpp RTPacket.cpp @@ -48,11 +46,10 @@ target_include_directories(${PROJECT_NAME} $/External/tinyxml2 ) -# Windows-specific linking target_link_libraries(${PROJECT_NAME} PUBLIC - $<$:ws2_32> - $<$:iphlpapi> + $<$,Windows>:ws2_32> + $<$,Windows>:iphlpapi> ) # Enable C++14