From 2b1d39ebcfe737af025663e8488d22905995e102 Mon Sep 17 00:00:00 2001 From: Mauricio Souza de Alencar <856825+mdealencar@users.noreply.github.com> Date: Thu, 6 Feb 2025 22:24:15 +0100 Subject: [PATCH 1/5] fix: make reference to internal project path independent of top-level cmake parent project --- Test/Test-c/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Test/Test-c/CMakeLists.txt b/Test/Test-c/CMakeLists.txt index 0a89d265e..76f884a5b 100644 --- a/Test/Test-c/CMakeLists.txt +++ b/Test/Test-c/CMakeLists.txt @@ -2,12 +2,12 @@ cmake_minimum_required(VERSION 3.15) project(HGS_Test_c) set(CMAKE_C_STANDARD 99) -include_directories(${CMAKE_SOURCE_DIR}/Program) +include_directories(${HGS_CVRP_SOURCE_DIR}/Program) add_executable(lib_test_c test.c - ${CMAKE_SOURCE_DIR}/Program/C_Interface.h - ${CMAKE_SOURCE_DIR}/Program/AlgorithmParameters.h + ${HGS_CVRP_SOURCE_DIR}/Program/C_Interface.h + ${HGS_CVRP_SOURCE_DIR}/Program/AlgorithmParameters.h ) target_link_libraries(lib_test_c -lm lib) # need -lm to link math library From 9b5e7c612da09e94960f410b715a3beeb7f6f122 Mon Sep 17 00:00:00 2001 From: Mauricio Souza de Alencar <856825+mdealencar@users.noreply.github.com> Date: Thu, 6 Feb 2025 22:47:01 +0100 Subject: [PATCH 2/5] fix: make reference to internal project path independent of top-level cmake parent project (top-level CMakeLists.txt) --- CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe7553ced..2b7c7b91a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,24 +33,24 @@ add_test(NAME bin_test_X-n101-k25 COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n101-k25 -DCOST=27591 -DROUND=1 - -P ${CMAKE_CURRENT_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) add_test(NAME bin_test_X-n106-k14 COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n110-k13 -DCOST=14971 -DROUND=1 - -P ${CMAKE_CURRENT_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) # Test Executable: Instances with Duration, without Rounding add_test(NAME bin_test_CMT6 COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT6 -DCOST=555.43 -DROUND=0 - -P ${CMAKE_CURRENT_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) add_test(NAME bin_test_CMT7 COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT7 -DCOST=909.675 -DROUND=0 - -P ${CMAKE_CURRENT_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) # Build Library add_library(lib SHARED ${src_files}) @@ -67,4 +67,4 @@ install(TARGETS lib install(TARGETS bin DESTINATION bin) install(FILES Program/AlgorithmParameters.h Program/C_Interface.h - DESTINATION include) \ No newline at end of file + DESTINATION include) From c0c68ebe68f1d43adc1fc4a4d6f671330af2bb26 Mon Sep 17 00:00:00 2001 From: Mauricio Souza de Alencar <856825+mdealencar@users.noreply.github.com> Date: Fri, 7 Feb 2025 08:23:20 +0100 Subject: [PATCH 3/5] fix: make reference to internal project path using PROJECT_SOURCE_DIR --- CMakeLists.txt | 8 ++++---- Test/Test-c/CMakeLists.txt | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b7c7b91a..1195ad036 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,24 +33,24 @@ add_test(NAME bin_test_X-n101-k25 COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n101-k25 -DCOST=27591 -DROUND=1 - -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) add_test(NAME bin_test_X-n106-k14 COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n110-k13 -DCOST=14971 -DROUND=1 - -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) # Test Executable: Instances with Duration, without Rounding add_test(NAME bin_test_CMT6 COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT6 -DCOST=555.43 -DROUND=0 - -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) add_test(NAME bin_test_CMT7 COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT7 -DCOST=909.675 -DROUND=0 - -P ${HGS_CVRP_SOURCE_DIR}/Test/TestExecutable.cmake) + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) # Build Library add_library(lib SHARED ${src_files}) diff --git a/Test/Test-c/CMakeLists.txt b/Test/Test-c/CMakeLists.txt index 76f884a5b..890c6c9a7 100644 --- a/Test/Test-c/CMakeLists.txt +++ b/Test/Test-c/CMakeLists.txt @@ -6,8 +6,8 @@ include_directories(${HGS_CVRP_SOURCE_DIR}/Program) add_executable(lib_test_c test.c - ${HGS_CVRP_SOURCE_DIR}/Program/C_Interface.h - ${HGS_CVRP_SOURCE_DIR}/Program/AlgorithmParameters.h + ${PROJECT_SOURCE_DIR}/Program/C_Interface.h + ${PROJECT_SOURCE_DIR}/Program/AlgorithmParameters.h ) target_link_libraries(lib_test_c -lm lib) # need -lm to link math library From a6974f784273471eebf5511f94c72d5c08228330 Mon Sep 17 00:00:00 2001 From: Mauricio Souza de Alencar <856825+mdealencar@users.noreply.github.com> Date: Fri, 7 Feb 2025 14:23:27 +0100 Subject: [PATCH 4/5] fix: make the two CMakeLists.txt work with gcc and msvc --- CMakeLists.txt | 29 +++++++++++++++++++++++------ Test/Test-c/CMakeLists.txt | 13 +++++-------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1195ad036..7ee953279 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,14 +20,33 @@ endif (MSVC) include_directories(Program) + +# Build Library + +# object to be used by both static and shared (compile only once) +add_library(objlib OBJECT ${src_files}) +set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1) + +# static library +add_library(lib_static STATIC $) +# if static and runtime libraries use name "hgscvrp", MSVC will overwrite one +# of them, because both STATIC and SHARED builds create "hgscvrp.lib" +set_target_properties(lib_static PROPERTIES OUTPUT_NAME hgscvrp_static) + +# runtime library +add_library(lib SHARED $) +set_target_properties(lib PROPERTIES OUTPUT_NAME hgscvrp) + + # Build Executable -add_executable(bin - Program/main.cpp - ${src_files}) +add_executable(bin Program/main.cpp) +target_link_libraries(bin PRIVATE lib_static) set_target_properties(bin PROPERTIES OUTPUT_NAME hgs) + # Test Executable + include(CTest) add_test(NAME bin_test_X-n101-k25 COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n101-k25 @@ -52,15 +71,13 @@ add_test(NAME bin_test_CMT7 -DROUND=0 -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) -# Build Library -add_library(lib SHARED ${src_files}) -set_target_properties(lib PROPERTIES OUTPUT_NAME hgscvrp) # Test Library add_subdirectory(Test/Test-c/) add_test(NAME lib_test_c COMMAND lib_test_c) + # Install install(TARGETS lib DESTINATION lib) diff --git a/Test/Test-c/CMakeLists.txt b/Test/Test-c/CMakeLists.txt index 890c6c9a7..677bd90e3 100644 --- a/Test/Test-c/CMakeLists.txt +++ b/Test/Test-c/CMakeLists.txt @@ -2,13 +2,10 @@ cmake_minimum_required(VERSION 3.15) project(HGS_Test_c) set(CMAKE_C_STANDARD 99) -include_directories(${HGS_CVRP_SOURCE_DIR}/Program) +add_executable(lib_test_c test.c) -add_executable(lib_test_c - test.c - ${PROJECT_SOURCE_DIR}/Program/C_Interface.h - ${PROJECT_SOURCE_DIR}/Program/AlgorithmParameters.h - ) - -target_link_libraries(lib_test_c -lm lib) # need -lm to link math library +IF (NOT WIN32) + target_link_libraries(lib_test_c m) +ENDIF() +target_link_libraries(lib_test_c lib_static) From e22e648f6e12c82c4af0c874de3f91c4bef4bf40 Mon Sep 17 00:00:00 2001 From: Mauricio Souza de Alencar <856825+mdealencar@users.noreply.github.com> Date: Thu, 20 Mar 2025 23:00:47 +0100 Subject: [PATCH 5/5] feat: isolate building of shared library when built through external FetchContent (CMakeLists.txt) --- CMakeLists.txt | 110 ++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 56 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ee953279..1b4c2f909 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,68 +20,66 @@ endif (MSVC) include_directories(Program) - -# Build Library - # object to be used by both static and shared (compile only once) add_library(objlib OBJECT ${src_files}) set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1) -# static library -add_library(lib_static STATIC $) -# if static and runtime libraries use name "hgscvrp", MSVC will overwrite one -# of them, because both STATIC and SHARED builds create "hgscvrp.lib" -set_target_properties(lib_static PROPERTIES OUTPUT_NAME hgscvrp_static) - # runtime library add_library(lib SHARED $) set_target_properties(lib PROPERTIES OUTPUT_NAME hgscvrp) +if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + # We're in the root, build everything + # static library + add_library(lib_static STATIC $) + # if static and runtime libraries use name "hgscvrp", MSVC will overwrite one + # of them, because both STATIC and SHARED builds create "hgscvrp.lib" + set_target_properties(lib_static PROPERTIES OUTPUT_NAME hgscvrp_static) + + # Build Executable + + add_executable(bin Program/main.cpp) + target_link_libraries(bin PRIVATE lib_static) + set_target_properties(bin PROPERTIES OUTPUT_NAME hgs) + + + # Test Executable + + include(CTest) + add_test(NAME bin_test_X-n101-k25 + COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n101-k25 + -DCOST=27591 + -DROUND=1 + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) + add_test(NAME bin_test_X-n106-k14 + COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n110-k13 + -DCOST=14971 + -DROUND=1 + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) + + # Test Executable: Instances with Duration, without Rounding + add_test(NAME bin_test_CMT6 + COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT6 + -DCOST=555.43 + -DROUND=0 + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) + add_test(NAME bin_test_CMT7 + COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT7 + -DCOST=909.675 + -DROUND=0 + -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) + + # Test Library + add_subdirectory(Test/Test-c/) + add_test(NAME lib_test_c + COMMAND lib_test_c) + + # Install + install(TARGETS lib + DESTINATION lib) + install(TARGETS bin + DESTINATION bin) + install(FILES Program/AlgorithmParameters.h Program/C_Interface.h + DESTINATION include) +endif() -# Build Executable - -add_executable(bin Program/main.cpp) -target_link_libraries(bin PRIVATE lib_static) -set_target_properties(bin PROPERTIES OUTPUT_NAME hgs) - - -# Test Executable - -include(CTest) -add_test(NAME bin_test_X-n101-k25 - COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n101-k25 - -DCOST=27591 - -DROUND=1 - -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) -add_test(NAME bin_test_X-n106-k14 - COMMAND ${CMAKE_COMMAND} -DINSTANCE=X-n110-k13 - -DCOST=14971 - -DROUND=1 - -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) - -# Test Executable: Instances with Duration, without Rounding -add_test(NAME bin_test_CMT6 - COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT6 - -DCOST=555.43 - -DROUND=0 - -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) -add_test(NAME bin_test_CMT7 - COMMAND ${CMAKE_COMMAND} -DINSTANCE=CMT7 - -DCOST=909.675 - -DROUND=0 - -P ${PROJECT_SOURCE_DIR}/Test/TestExecutable.cmake) - - -# Test Library -add_subdirectory(Test/Test-c/) -add_test(NAME lib_test_c - COMMAND lib_test_c) - - -# Install -install(TARGETS lib - DESTINATION lib) -install(TARGETS bin - DESTINATION bin) -install(FILES Program/AlgorithmParameters.h Program/C_Interface.h - DESTINATION include)