From 2e161f5ca7a3dacff6fdc8e4fcca241ace2458dd Mon Sep 17 00:00:00 2001 From: wep21 Date: Tue, 13 Feb 2024 13:39:54 +0900 Subject: [PATCH 1/6] feat: use modern cmake Signed-off-by: wep21 --- CMakeLists.txt | 150 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 109 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4aead5..1252ad5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.19) project(filters) # Default to C++14 @@ -17,58 +17,127 @@ endif() find_package(ament_cmake REQUIRED) find_package(pluginlib REQUIRED) find_package(rclcpp REQUIRED) -find_package(Boost REQUIRED) +find_package(Boost REQUIRED COMPONENTS headers) ############################################################################## # Build ############################################################################## -add_library(real_time_circular_buffer INTERFACE) -target_include_directories(real_time_circular_buffer INTERFACE - include - ${Boost_INCLUDE_DIRS}) +add_library(realtime_circular_buffer + INTERFACE + include/filters/realtime_circular_buffer.h + include/filters/realtime_circular_buffer.hpp +) +target_link_libraries(realtime_circular_buffer + INTERFACE + Boost::boost +) +target_include_directories(realtime_circular_buffer + INTERFACE + $ + $ +) + +add_library(filter_base + INTERFACE + include/filters/filter_base.h + include/filters/filter_base.hpp +) +target_link_libraries(filter_base + INTERFACE + rclcpp::rclcpp +) +target_include_directories(filter_base + INTERFACE + $ + $ +) + +add_library(filter_chain + INTERFACE + include/filters/filter_chain.h + include/filters/filter_chain.hpp +) +target_link_libraries(filter_chain + INTERFACE + filter_base + pluginlib::pluginlib +) +target_include_directories(filter_chain + INTERFACE + $ + $ +) # Plugins add_library(mean SHARED src/mean.cpp) target_link_libraries(mean - real_time_circular_buffer) -ament_target_dependencies(mean - "pluginlib" - "rclcpp" + realtime_circular_buffer + filter_base + pluginlib::pluginlib +) +target_include_directories(mean + PUBLIC + $ + $ ) add_library(params SHARED src/test_params.cpp) target_link_libraries(params - real_time_circular_buffer) -ament_target_dependencies(params - "pluginlib" - "rclcpp" + filter_base + pluginlib::pluginlib +) +target_include_directories(params + PUBLIC + $ + $ ) add_library(increment SHARED src/increment.cpp) target_link_libraries(increment - real_time_circular_buffer) -ament_target_dependencies(increment - "pluginlib" - "rclcpp" + realtime_circular_buffer + filter_base + pluginlib::pluginlib +) +target_include_directories(increment + PUBLIC + $ + $ ) add_library(median SHARED src/median.cpp) target_link_libraries(median - real_time_circular_buffer) -ament_target_dependencies(median - "pluginlib" - "rclcpp" + realtime_circular_buffer + filter_base + pluginlib::pluginlib +) +target_include_directories(median + PUBLIC + $ + $ ) add_library(transfer_function SHARED src/transfer_function.cpp) target_link_libraries(transfer_function - real_time_circular_buffer) -ament_target_dependencies(transfer_function - "pluginlib" - "rclcpp" + realtime_circular_buffer + filter_base + pluginlib::pluginlib +) +target_include_directories(transfer_function + PUBLIC + $ + $ +) + +install(TARGETS realtime_circular_buffer filter_base filter_chain mean increment median transfer_function + EXPORT export_${PROJECT_NAME} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin ) +install(DIRECTORY include/ DESTINATION include/${PROJECT_NAME}) + if(BUILD_TESTING) # TODO(hidmic): use ament_lint_common once ament_copyright complains are resolved find_package(ament_cmake_cppcheck REQUIRED) @@ -104,7 +173,7 @@ if(BUILD_TESTING) # Test realtime safe buffer class ament_add_gtest(realtime_buffer_test test/test_realtime_circular_buffer.cpp) - target_link_libraries(realtime_buffer_test real_time_circular_buffer) + target_link_libraries(realtime_buffer_test realtime_circular_buffer) # Pluginlib specific testing for filter chain set(test_prefix "${CMAKE_CURRENT_BINARY_DIR}/pluginlib_test_prefix") @@ -141,9 +210,8 @@ if(BUILD_TESTING) foreach(test_plugin_target IN LISTS test_plugin_targets) add_dependencies(chain_test "copy_${test_plugin_target}_for_testing") endforeach() - ament_target_dependencies(chain_test - "rclcpp" - "pluginlib" + target_link_libraries(chain_test + filter_chain ) endif() @@ -151,19 +219,19 @@ endif() # Install ############################################################################## -# Install libraries -install( - TARGETS mean increment median transfer_function - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin -) +# Export old-style CMake variables +ament_export_include_directories("include/${PROJECT_NAME}") +ament_export_libraries(${PROJECT_NAME}) + +# Export modern CMake targets +ament_export_targets(export_${PROJECT_NAME}) -# Install headers -install(DIRECTORY include/ - DESTINATION include) +ament_export_dependencies( + Boost + pluginlib + rclcpp +) # Install pluginlib xml pluginlib_export_plugin_description_file(filters "default_plugins.xml") -ament_export_include_directories(include) ament_package() From b37a413208ce7146369ea5507854e1e1d5b371ff Mon Sep 17 00:00:00 2001 From: Daisuke Nishimatsu <42202095+wep21@users.noreply.github.com> Date: Thu, 22 Feb 2024 15:37:46 +0900 Subject: [PATCH 2/6] Update CMakeLists.txt Co-authored-by: Ryan --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1252ad5..52a1489 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.19) +cmake_minimum_required(VERSION 3.14.4) project(filters) # Default to C++14 From 7ea64fd9b191bbe60fd57f5595de20ce25882e57 Mon Sep 17 00:00:00 2001 From: wep21 Date: Thu, 22 Feb 2024 15:53:45 +0900 Subject: [PATCH 3/6] use for loop to set target include dirs Signed-off-by: wep21 --- CMakeLists.txt | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 52a1489..67ed9c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,11 +32,6 @@ target_link_libraries(realtime_circular_buffer INTERFACE Boost::boost ) -target_include_directories(realtime_circular_buffer - INTERFACE - $ - $ -) add_library(filter_base INTERFACE @@ -47,11 +42,6 @@ target_link_libraries(filter_base INTERFACE rclcpp::rclcpp ) -target_include_directories(filter_base - INTERFACE - $ - $ -) add_library(filter_chain INTERFACE @@ -63,11 +53,17 @@ target_link_libraries(filter_chain filter_base pluginlib::pluginlib ) -target_include_directories(filter_chain - INTERFACE - $ - $ -) + +set(targets realtime_circular_buffer filter_base filter_chain) +foreach(target ${targets}) + target_include_directories(${target} + INTERFACE + $ + $ + ) +endforeach() + + # Plugins add_library(mean SHARED src/mean.cpp) From 6e1a2c5f7358ea680a598175a4c437ef19d5e7c5 Mon Sep 17 00:00:00 2001 From: wep21 Date: Thu, 22 Feb 2024 16:00:56 +0900 Subject: [PATCH 4/6] specify PUBLIC for the linkage type Signed-off-by: wep21 --- CMakeLists.txt | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67ed9c1..d0735d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,9 +68,10 @@ endforeach() # Plugins add_library(mean SHARED src/mean.cpp) target_link_libraries(mean - realtime_circular_buffer - filter_base - pluginlib::pluginlib + PUBLIC + realtime_circular_buffer + filter_base + pluginlib::pluginlib ) target_include_directories(mean PUBLIC @@ -80,8 +81,9 @@ target_include_directories(mean add_library(params SHARED src/test_params.cpp) target_link_libraries(params - filter_base - pluginlib::pluginlib + PUBLIC + filter_base + pluginlib::pluginlib ) target_include_directories(params PUBLIC @@ -91,9 +93,10 @@ target_include_directories(params add_library(increment SHARED src/increment.cpp) target_link_libraries(increment - realtime_circular_buffer - filter_base - pluginlib::pluginlib + PUBLIC + realtime_circular_buffer + filter_base + pluginlib::pluginlib ) target_include_directories(increment PUBLIC @@ -103,9 +106,10 @@ target_include_directories(increment add_library(median SHARED src/median.cpp) target_link_libraries(median - realtime_circular_buffer - filter_base - pluginlib::pluginlib + PUBLIC + realtime_circular_buffer + filter_base + pluginlib::pluginlib ) target_include_directories(median PUBLIC @@ -115,9 +119,10 @@ target_include_directories(median add_library(transfer_function SHARED src/transfer_function.cpp) target_link_libraries(transfer_function - realtime_circular_buffer - filter_base - pluginlib::pluginlib + PUBLIC + realtime_circular_buffer + filter_base + pluginlib::pluginlib ) target_include_directories(transfer_function PUBLIC From d2a3b0f3463f5787cec1a2ca86f26bb370223a6e Mon Sep 17 00:00:00 2001 From: wep21 Date: Thu, 22 Feb 2024 16:10:36 +0900 Subject: [PATCH 5/6] use for loop to set target include dirs Signed-off-by: wep21 --- CMakeLists.txt | 40 ++++++++++++---------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d0735d3..170ff77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,8 +54,8 @@ target_link_libraries(filter_chain pluginlib::pluginlib ) -set(targets realtime_circular_buffer filter_base filter_chain) -foreach(target ${targets}) +set(interface_targets realtime_circular_buffer filter_base filter_chain) +foreach(target ${interface_targets}) target_include_directories(${target} INTERFACE $ @@ -73,11 +73,6 @@ target_link_libraries(mean filter_base pluginlib::pluginlib ) -target_include_directories(mean - PUBLIC - $ - $ -) add_library(params SHARED src/test_params.cpp) target_link_libraries(params @@ -85,11 +80,6 @@ target_link_libraries(params filter_base pluginlib::pluginlib ) -target_include_directories(params - PUBLIC - $ - $ -) add_library(increment SHARED src/increment.cpp) target_link_libraries(increment @@ -98,11 +88,6 @@ target_link_libraries(increment filter_base pluginlib::pluginlib ) -target_include_directories(increment - PUBLIC - $ - $ -) add_library(median SHARED src/median.cpp) target_link_libraries(median @@ -111,11 +96,6 @@ target_link_libraries(median filter_base pluginlib::pluginlib ) -target_include_directories(median - PUBLIC - $ - $ -) add_library(transfer_function SHARED src/transfer_function.cpp) target_link_libraries(transfer_function @@ -124,13 +104,17 @@ target_link_libraries(transfer_function filter_base pluginlib::pluginlib ) -target_include_directories(transfer_function - PUBLIC - $ - $ -) -install(TARGETS realtime_circular_buffer filter_base filter_chain mean increment median transfer_function +set(plugin_targets mean params increment median transfer_function) +foreach(target ${plugin_targets}) + target_include_directories(${target} + PUBLIC + $ + $ + ) +endforeach() + +install(TARGETS ${interface_targets} ${plugin_targets} EXPORT export_${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib From 0cd969577992a8be6baa62ee355cbe929bdcfac0 Mon Sep 17 00:00:00 2001 From: wep21 Date: Thu, 22 Feb 2024 16:13:10 +0900 Subject: [PATCH 6/6] add HAS_LIBRARY_TARGET Signed-off-by: wep21 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 170ff77..361a0a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,7 +209,7 @@ ament_export_include_directories("include/${PROJECT_NAME}") ament_export_libraries(${PROJECT_NAME}) # Export modern CMake targets -ament_export_targets(export_${PROJECT_NAME}) +ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) ament_export_dependencies( Boost