Skip to content

Commit 47b9df7

Browse files
committed
Revamp the building of the driver for modern ROS 2 practices.
This includes getting rid of ament_target_dependencies in favor of target_link_libraries, installing includes to another level down in the hierarchy, and generally making things use modern CMake. Note that all of this only applies to ROS 2 Humble and later. Signed-off-by: Chris Lalancette <[email protected]>
1 parent 24c4722 commit 47b9df7

File tree

3 files changed

+65
-45
lines changed

3 files changed

+65
-45
lines changed

ublox_gps/CMakeLists.txt

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ find_package(tf2 REQUIRED)
2626
find_package(ublox_msgs REQUIRED)
2727
find_package(ublox_serialization REQUIRED)
2828

29-
include_directories(include)
30-
3129
# build node
3230
add_library(ublox_gps
3331
src/adr_udr_product.cpp
@@ -46,56 +44,64 @@ add_library(ublox_gps
4644
src/ublox_firmware7.cpp
4745
src/ublox_firmware8.cpp
4846
src/ublox_firmware9.cpp)
49-
ament_target_dependencies(ublox_gps
50-
"asio"
51-
"diagnostic_msgs"
52-
"diagnostic_updater"
53-
"geometry_msgs"
54-
"rcl_interfaces"
55-
"rclcpp"
56-
"rclcpp_components"
57-
"sensor_msgs"
58-
"std_msgs"
59-
"tf2"
60-
"ublox_msgs"
61-
"ublox_serialization"
47+
target_include_directories(ublox_gps PUBLIC
48+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
49+
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>"
50+
${diagnostic_updater_INCLUDE_DIRS}
51+
)
52+
target_link_libraries(ublox_gps PUBLIC
53+
${asio_LIBRARIES}
54+
${diagnostic_updater_LIBRARIES}
55+
${diagnostic_msgs_TARGETS}
56+
${geometry_msgs_TARGETS}
57+
${rcl_interfaces_TARGETS}
58+
rclcpp::rclcpp
59+
rclcpp_components::component
60+
${sensor_msgs_TARGETS}
61+
${std_msgs_TARGETS}
62+
tf2::tf2
63+
${ublox_msgs_TARGETS}
64+
ublox_serialization::ublox_serialization
6265
)
6366

64-
install(TARGETS ublox_gps
67+
install(TARGETS ublox_gps EXPORT export_${PROJECT_NAME}
6568
ARCHIVE DESTINATION lib
6669
LIBRARY DESTINATION lib
6770
RUNTIME DESTINATION bin
6871
)
6972

7073
add_executable(ublox_gps_node src/node_main.cpp)
71-
ament_target_dependencies(ublox_gps_node
72-
"rclcpp"
74+
target_link_libraries(ublox_gps_node PRIVATE
75+
rclcpp::rclcpp
76+
ublox_gps
7377
)
74-
target_link_libraries(ublox_gps_node ublox_gps)
7578

7679
# build logger node
77-
add_executable(ublox_logger_node src/logger_node_pa.cpp src/raw_data_pa.cpp)
78-
set_target_properties(ublox_logger_node PROPERTIES OUTPUT_NAME ublox_logger)
79-
ament_target_dependencies(ublox_logger_node
80-
"rclcpp"
81-
"std_msgs"
80+
add_executable(ublox_logger src/logger_node_pa.cpp src/raw_data_pa.cpp)
81+
target_link_libraries(ublox_logger PRIVATE
82+
rclcpp::rclcpp
83+
${std_msgs_TARGETS}
84+
ublox_gps
8285
)
8386

8487
install(TARGETS
85-
ublox_gps_node ublox_logger_node
88+
ublox_gps_node ublox_logger
8689
DESTINATION lib/${PROJECT_NAME}
8790
)
8891

8992
rclcpp_components_register_nodes(ublox_gps
9093
"ublox_node::UbloxNode")
9194

9295
install(DIRECTORY include/
93-
DESTINATION include
96+
DESTINATION include/${PROJECT_NAME}
9497
)
9598

9699
install(
97100
DIRECTORY launch config
98101
DESTINATION share/${PROJECT_NAME}
99102
)
100103

104+
ament_export_include_directories("include/${PROJECT_NAME}")
105+
ament_export_targets(export_${PROJECT_NAME})
106+
101107
ament_package()

ublox_msgs/CMakeLists.txt

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,26 +103,32 @@ rosidl_generate_interfaces(${PROJECT_NAME}
103103
std_msgs
104104
)
105105

106-
include_directories(include)
107-
add_library(${PROJECT_NAME}_lib src/ublox_msgs.cpp)
108-
rosidl_target_interfaces(${PROJECT_NAME}_lib ${PROJECT_NAME} "rosidl_typesupport_cpp")
109-
ament_target_dependencies(${PROJECT_NAME}_lib
110-
"ublox_serialization"
111-
)
106+
rosidl_get_typesupport_target(cpp_typesupport_target "${PROJECT_NAME}" "rosidl_typesupport_cpp")
107+
if(cpp_typesupport_target)
108+
add_library(${PROJECT_NAME}_lib src/ublox_msgs.cpp)
109+
target_include_directories(${PROJECT_NAME}_lib PRIVATE
110+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
111+
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>")
112+
target_link_libraries(${PROJECT_NAME}_lib
113+
${cpp_typesupport_target}
114+
ublox_serialization::ublox_serialization
115+
)
112116

113-
install(TARGETS ${PROJECT_NAME}_lib EXPORT ${PROJECT_NAME}_lib
114-
ARCHIVE DESTINATION lib
115-
LIBRARY DESTINATION lib
116-
RUNTIME DESTINATION bin
117-
)
117+
install(TARGETS ${PROJECT_NAME}_lib EXPORT ${PROJECT_NAME}_lib
118+
ARCHIVE DESTINATION lib
119+
LIBRARY DESTINATION lib
120+
RUNTIME DESTINATION bin
121+
)
118122

119-
install(DIRECTORY include/
120-
DESTINATION include
121-
)
123+
install(DIRECTORY include/
124+
DESTINATION "include/${PROJECT_NAME}"
125+
)
126+
127+
ament_export_include_directories("include/${PROJECT_NAME}")
128+
ament_export_libraries(${PROJECT_NAME}_lib)
129+
ament_export_targets(${PROJECT_NAME}_lib)
130+
endif()
122131

123-
ament_export_include_directories(include)
124-
ament_export_libraries(${PROJECT_NAME}_lib)
125-
ament_export_targets(${PROJECT_NAME}_lib)
126132
ament_export_dependencies(rosidl_default_runtime sensor_msgs std_msgs ublox_serialization)
127133

128134
ament_package()

ublox_serialization/CMakeLists.txt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@ project(ublox_serialization)
44

55
find_package(ament_cmake REQUIRED)
66

7+
add_library(${PROJECT_NAME} INTERFACE)
8+
target_include_directories(${PROJECT_NAME} INTERFACE
9+
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
10+
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>")
11+
712
install(DIRECTORY include/
8-
DESTINATION include
13+
DESTINATION include/${PROJECT_NAME}
914
)
15+
install(TARGETS ${PROJECT_NAME} EXPORT export_${PROJECT_NAME})
16+
17+
ament_export_include_directories("include/${PROJECT_NAME}")
1018

11-
ament_export_include_directories(include)
19+
ament_export_targets(export_${PROJECT_NAME})
1220

1321
ament_package()

0 commit comments

Comments
 (0)