Skip to content

Commit c2a33ff

Browse files
clalancettestevedanomodolor
authored andcommitted
Revamp nav2_util CMakeLists.txt to use modern idioms. (ros-navigation#4393)
This commit does a number of things: 1. Switches to using target_link_libraries everywhere. This gives us finer-grained control over what dependencies are exported to downstream as public, or private. In the particular case of nav2_util, this actually doesn't matter *too* much, but it will help for other packages. 2. Moves the include directory down one level to include/${PROJECT_NAME}, which is best practice in ROS 2 since Humble. 3. Makes sure to export nav2_util as a CMake target, so downstream users of it can use that target. 4. Moves the base_footprint_publisher.hpp header file into the src directory, as it isn't functionality that an external project could use. Signed-off-by: Chris Lalancette <[email protected]> Signed-off-by: stevedanomodolor <[email protected]>
1 parent c2c021e commit c2a33ff

File tree

10 files changed

+96
-111
lines changed

10 files changed

+96
-111
lines changed

nav2_util/CMakeLists.txt

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,36 @@ cmake_minimum_required(VERSION 3.5)
22
project(nav2_util)
33

44
find_package(ament_cmake REQUIRED)
5+
find_package(bond REQUIRED)
6+
find_package(bondcpp REQUIRED)
7+
find_package(geometry_msgs REQUIRED)
8+
find_package(lifecycle_msgs REQUIRED)
59
find_package(nav2_common REQUIRED)
610
find_package(nav2_msgs REQUIRED)
7-
find_package(tf2_ros REQUIRED)
8-
find_package(tf2 REQUIRED)
9-
find_package(tf2_geometry_msgs REQUIRED)
10-
find_package(geometry_msgs REQUIRED)
1111
find_package(nav_msgs REQUIRED)
12+
find_package(rcl_interfaces REQUIRED)
1213
find_package(rclcpp REQUIRED)
13-
find_package(lifecycle_msgs REQUIRED)
1414
find_package(rclcpp_action REQUIRED)
1515
find_package(rclcpp_lifecycle REQUIRED)
16+
find_package(std_msgs REQUIRED)
17+
find_package(tf2 REQUIRED)
1618
find_package(tf2_geometry_msgs REQUIRED)
17-
find_package(bondcpp REQUIRED)
18-
find_package(bond REQUIRED)
19-
find_package(action_msgs REQUIRED)
20-
21-
set(dependencies
22-
nav2_msgs
23-
tf2_ros
24-
tf2
25-
tf2_geometry_msgs
26-
geometry_msgs
27-
nav_msgs
28-
rclcpp
29-
lifecycle_msgs
30-
rclcpp_action
31-
rclcpp_lifecycle
32-
bondcpp
33-
bond
34-
action_msgs
35-
rcl_interfaces
36-
)
19+
find_package(tf2_msgs REQUIRED)
20+
find_package(tf2_ros REQUIRED)
3721

3822
nav2_package()
3923

40-
include_directories(include)
41-
4224
set(library_name ${PROJECT_NAME}_core)
25+
4326
add_subdirectory(src)
4427

4528
install(DIRECTORY include/
46-
DESTINATION include/
29+
DESTINATION include/${PROJECT_NAME}
4730
)
4831

4932
if(BUILD_TESTING)
5033
find_package(ament_lint_auto REQUIRED)
5134
find_package(ament_cmake_pytest REQUIRED)
52-
find_package(launch_testing_ament_cmake REQUIRED)
5335
# skip copyright linting
5436
set(ament_cmake_copyright_FOUND TRUE)
5537
ament_lint_auto_find_test_dependencies()
@@ -58,8 +40,23 @@ if(BUILD_TESTING)
5840
add_subdirectory(test)
5941
endif()
6042

61-
ament_export_include_directories(include)
43+
ament_export_include_directories(include/${PROJECT_NAME})
6244
ament_export_libraries(${library_name})
63-
ament_export_dependencies(${dependencies})
45+
ament_export_dependencies(
46+
bondcpp
47+
geometry_msgs
48+
lifecycle_msgs
49+
nav2_msgs
50+
nav_msgs
51+
rcl_interfaces
52+
rclcpp
53+
rclcpp_action
54+
rclcpp_lifecycle
55+
std_msgs
56+
tf2
57+
tf2_geometry_msgs
58+
tf2_ros
59+
)
60+
ament_export_targets(${library_name})
6461

6562
ament_package()

nav2_util/include/nav2_util/lifecycle_node.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <string>
2020
#include <thread>
2121

22+
#include "rcl_interfaces/msg/parameter_descriptor.hpp"
2223
#include "nav2_util/node_thread.hpp"
2324
#include "rclcpp_lifecycle/lifecycle_node.hpp"
2425
#include "rclcpp/rclcpp.hpp"

nav2_util/package.xml

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,31 @@
1010
<license>BSD-3-Clause</license>
1111

1212
<buildtool_depend>ament_cmake</buildtool_depend>
13-
<build_depend>libboost-program-options-dev</build_depend>
13+
1414
<depend>nav2_common</depend>
1515

16+
<depend>bond</depend>
17+
<depend>bondcpp</depend>
18+
<depend>builtin_interfaces</depend>
1619
<depend>geometry_msgs</depend>
17-
<depend>rclcpp</depend>
20+
<depend>lifecycle_msgs</depend>
1821
<depend>nav2_msgs</depend>
1922
<depend>nav_msgs</depend>
20-
<depend>tf2</depend>
21-
<depend>tf2_ros</depend>
22-
<depend>tf2_geometry_msgs</depend>
23-
<depend>lifecycle_msgs</depend>
24-
<depend>bondcpp</depend>
25-
<depend>bond</depend>
23+
<depend>rcl_interfaces</depend>
24+
<depend>rclcpp</depend>
2625
<depend>rclcpp_action</depend>
2726
<depend>rclcpp_lifecycle</depend>
28-
<depend>launch</depend>
29-
<depend>launch_testing_ament_cmake</depend>
30-
<depend>action_msgs</depend>
31-
<depend>rcl_interfaces</depend>
32-
33-
<exec_depend>libboost-program-options</exec_depend>
27+
<depend>std_msgs</depend>
28+
<depend>tf2</depend>
29+
<depend>tf2_geometry_msgs</depend>
30+
<depend>tf2_msgs</depend>
31+
<depend>tf2_ros</depend>
3432

3533
<test_depend>ament_lint_common</test_depend>
3634
<test_depend>ament_lint_auto</test_depend>
3735
<test_depend>ament_cmake_gtest</test_depend>
38-
<test_depend>launch</test_depend>
39-
<test_depend>launch_testing_ament_cmake</test_depend>
4036
<test_depend>std_srvs</test_depend>
4137
<test_depend>test_msgs</test_depend>
42-
<test_depend>action_msgs</test_depend>
43-
<test_depend>launch_testing_ros</test_depend>
4438
<test_depend>ament_cmake_pytest</test_depend>
4539

4640
<export>

nav2_util/src/CMakeLists.txt

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,41 @@ add_library(${library_name} SHARED
1010
odometry_utils.cpp
1111
array_parser.cpp
1212
)
13-
14-
ament_target_dependencies(${library_name}
15-
rclcpp
16-
nav2_msgs
17-
tf2
18-
tf2_ros
19-
nav_msgs
20-
geometry_msgs
21-
lifecycle_msgs
22-
rclcpp_lifecycle
23-
tf2_geometry_msgs
24-
bondcpp
13+
target_include_directories(${library_name}
14+
PUBLIC
15+
"$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>"
16+
"$<INSTALL_INTERFACE:include/${PROJECT_NAME}>")
17+
target_link_libraries(${library_name} PUBLIC
18+
bondcpp::bondcpp
19+
${geometry_msgs_TARGETS}
20+
${lifecycle_msgs_TARGETS}
21+
${nav2_msgs_TARGETS}
22+
${nav_msgs_TARGETS}
23+
${rcl_interfaces_TARGETS}
24+
rclcpp::rclcpp
25+
rclcpp_action::rclcpp_action
26+
rclcpp_lifecycle::rclcpp_lifecycle
27+
tf2_ros::tf2_ros
28+
tf2::tf2
29+
${tf2_geometry_msgs_TARGETS}
30+
)
31+
target_link_libraries(${library_name} PRIVATE
32+
${bond_TARGETS}
2533
)
2634

2735
add_executable(lifecycle_bringup
2836
lifecycle_bringup_commandline.cpp
2937
)
30-
target_link_libraries(lifecycle_bringup ${library_name})
38+
target_link_libraries(lifecycle_bringup PRIVATE ${library_name} rclcpp::rclcpp)
3139

3240
add_executable(base_footprint_publisher
3341
base_footprint_publisher.cpp
3442
)
35-
target_link_libraries(base_footprint_publisher ${library_name})
36-
37-
find_package(Boost REQUIRED COMPONENTS program_options)
43+
target_link_libraries(base_footprint_publisher PRIVATE ${library_name} rclcpp::rclcpp ${tf2_msgs_TARGETS})
3844

3945
install(TARGETS
4046
${library_name}
47+
EXPORT ${library_name}
4148
ARCHIVE DESTINATION lib
4249
LIBRARY DESTINATION lib
4350
RUNTIME DESTINATION bin

nav2_util/src/base_footprint_publisher.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
#include <memory>
1616

17-
#include "nav2_util/base_footprint_publisher.hpp"
17+
#include "base_footprint_publisher.hpp"
1818

1919
int main(int argc, char ** argv)
2020
{

nav2_util/include/nav2_util/base_footprint_publisher.hpp renamed to nav2_util/src/base_footprint_publisher.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
#ifndef NAV2_UTIL__BASE_FOOTPRINT_PUBLISHER_HPP_
16-
#define NAV2_UTIL__BASE_FOOTPRINT_PUBLISHER_HPP_
15+
#ifndef BASE_FOOTPRINT_PUBLISHER_HPP_
16+
#define BASE_FOOTPRINT_PUBLISHER_HPP_
1717

1818
#include <string>
1919
#include <memory>
@@ -126,4 +126,4 @@ class BaseFootprintPublisher : public rclcpp::Node
126126

127127
} // end namespace nav2_util
128128

129-
#endif // NAV2_UTIL__BASE_FOOTPRINT_PUBLISHER_HPP_
129+
#endif // BASE_FOOTPRINT_PUBLISHER_HPP_

nav2_util/src/lifecycle_utils.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,13 @@
1313
// limitations under the License.
1414

1515
#include <chrono>
16+
#include <stdexcept>
1617
#include <string>
17-
#include <thread>
1818
#include <vector>
1919

20-
#include "lifecycle_msgs/srv/change_state.hpp"
21-
#include "lifecycle_msgs/srv/get_state.hpp"
22-
#include "nav2_util/lifecycle_service_client.hpp"
20+
#include "lifecycle_msgs/msg/transition.hpp"
2321

24-
using std::string;
25-
using lifecycle_msgs::msg::Transition;
22+
#include "nav2_util/lifecycle_service_client.hpp"
2623

2724
namespace nav2_util
2825
{
@@ -34,7 +31,7 @@ namespace nav2_util
3431
try { \
3532
fn; \
3633
break; \
37-
} catch (std::runtime_error & e) { \
34+
} catch (const std::runtime_error & e) { \
3835
++count; \
3936
if (count > (retries)) { \
4037
throw e;} \
@@ -53,10 +50,10 @@ static void startupLifecycleNode(
5350
// service calls still frequently hang. To get reliable startup it's necessary
5451
// to timeout the service call and retry it when that happens.
5552
RETRY(
56-
sc.change_state(Transition::TRANSITION_CONFIGURE, service_call_timeout),
53+
sc.change_state(lifecycle_msgs::msg::Transition::TRANSITION_CONFIGURE, service_call_timeout),
5754
retries);
5855
RETRY(
59-
sc.change_state(Transition::TRANSITION_ACTIVATE, service_call_timeout),
56+
sc.change_state(lifecycle_msgs::msg::Transition::TRANSITION_ACTIVATE, service_call_timeout),
6057
retries);
6158
}
6259

@@ -81,10 +78,10 @@ static void resetLifecycleNode(
8178
// service calls still frequently hang. To get reliable reset it's necessary
8279
// to timeout the service call and retry it when that happens.
8380
RETRY(
84-
sc.change_state(Transition::TRANSITION_DEACTIVATE, service_call_timeout),
81+
sc.change_state(lifecycle_msgs::msg::Transition::TRANSITION_DEACTIVATE, service_call_timeout),
8582
retries);
8683
RETRY(
87-
sc.change_state(Transition::TRANSITION_CLEANUP, service_call_timeout),
84+
sc.change_state(lifecycle_msgs::msg::Transition::TRANSITION_CLEANUP, service_call_timeout),
8885
retries);
8986
}
9087

nav2_util/src/string_utils.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@
1515
#include "nav2_util/string_utils.hpp"
1616
#include <string>
1717

18-
using std::string;
19-
2018
namespace nav2_util
2119
{
2220

23-
std::string strip_leading_slash(const string & in)
21+
std::string strip_leading_slash(const std::string & in)
2422
{
25-
string out = in;
23+
std::string out = in;
2624

2725
if ((!in.empty()) && (in[0] == '/')) {
2826
out.erase(0, 1);
@@ -31,13 +29,13 @@ std::string strip_leading_slash(const string & in)
3129
return out;
3230
}
3331

34-
Tokens split(const string & tokenstring, char delimiter)
32+
Tokens split(const std::string & tokenstring, char delimiter)
3533
{
3634
Tokens tokens;
3735

3836
size_t current_pos = 0;
3937
size_t pos = 0;
40-
while ((pos = tokenstring.find(delimiter, current_pos)) != string::npos) {
38+
while ((pos = tokenstring.find(delimiter, current_pos)) != std::string::npos) {
4139
tokens.push_back(tokenstring.substr(current_pos, pos - current_pos));
4240
current_pos = pos + 1;
4341
}

nav2_util/test/CMakeLists.txt

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
ament_add_gtest(test_execution_timer test_execution_timer.cpp)
2+
target_link_libraries(test_execution_timer ${library_name})
23

34
ament_add_gtest(test_node_utils test_node_utils.cpp)
45
target_link_libraries(test_node_utils ${library_name})
@@ -7,56 +8,46 @@ find_package(std_srvs REQUIRED)
78
find_package(test_msgs REQUIRED)
89

910
ament_add_gtest(test_service_client test_service_client.cpp)
10-
ament_target_dependencies(test_service_client std_srvs)
11-
target_link_libraries(test_service_client ${library_name})
11+
target_link_libraries(test_service_client ${library_name} ${std_srvs_TARGETS})
1212

1313
ament_add_gtest(test_string_utils test_string_utils.cpp)
1414
target_link_libraries(test_string_utils ${library_name})
1515

1616
find_package(rclcpp_lifecycle REQUIRED)
1717
ament_add_gtest(test_lifecycle_utils test_lifecycle_utils.cpp)
18-
ament_target_dependencies(test_lifecycle_utils rclcpp_lifecycle)
19-
target_link_libraries(test_lifecycle_utils ${library_name})
18+
target_link_libraries(test_lifecycle_utils ${library_name} rclcpp_lifecycle::rclcpp_lifecycle)
2019

2120
ament_add_gtest(test_actions test_actions.cpp)
22-
ament_target_dependencies(test_actions rclcpp_action test_msgs)
23-
target_link_libraries(test_actions ${library_name})
21+
target_link_libraries(test_actions ${library_name} rclcpp_action::rclcpp_action ${test_msgs_TARGETS})
2422

2523
ament_add_gtest(test_lifecycle_node test_lifecycle_node.cpp)
26-
ament_target_dependencies(test_lifecycle_node rclcpp_lifecycle)
27-
target_link_libraries(test_lifecycle_node ${library_name})
24+
target_link_libraries(test_lifecycle_node ${library_name} rclcpp_lifecycle::rclcpp_lifecycle)
2825

2926
ament_add_gtest(test_lifecycle_cli_node test_lifecycle_cli_node.cpp)
30-
ament_target_dependencies(test_lifecycle_cli_node rclcpp_lifecycle)
31-
target_link_libraries(test_lifecycle_cli_node ${library_name})
27+
target_link_libraries(test_lifecycle_cli_node ${library_name} rclcpp_lifecycle::rclcpp_lifecycle)
3228

3329
ament_add_gtest(test_geometry_utils test_geometry_utils.cpp)
34-
ament_target_dependencies(test_geometry_utils geometry_msgs)
35-
target_link_libraries(test_geometry_utils ${library_name})
30+
target_link_libraries(test_geometry_utils ${library_name} ${geometry_msgs_TARGETS})
3631

3732
ament_add_gtest(test_odometry_utils test_odometry_utils.cpp)
38-
ament_target_dependencies(test_odometry_utils nav_msgs geometry_msgs)
39-
target_link_libraries(test_odometry_utils ${library_name})
33+
target_link_libraries(test_odometry_utils ${library_name} ${nav_msgs_TARGETS} ${geometry_msgs_TARGETS})
4034

4135
ament_add_gtest(test_robot_utils test_robot_utils.cpp)
42-
ament_target_dependencies(test_robot_utils geometry_msgs)
43-
target_link_libraries(test_robot_utils ${library_name})
36+
target_link_libraries(test_robot_utils ${library_name} ${geometry_msgs_TARGETS})
4437

4538
ament_add_gtest(test_base_footprint_publisher test_base_footprint_publisher.cpp)
46-
ament_target_dependencies(test_base_footprint_publisher geometry_msgs)
47-
target_link_libraries(test_base_footprint_publisher ${library_name})
39+
target_include_directories(test_base_footprint_publisher PRIVATE "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>")
40+
41+
target_link_libraries(test_base_footprint_publisher ${library_name} tf2_ros::tf2_ros rclcpp::rclcpp ${geometry_msgs_TARGETS})
4842

4943
ament_add_gtest(test_array_parser test_array_parser.cpp)
5044
target_link_libraries(test_array_parser ${library_name})
5145

5246
ament_add_gtest(test_twist_publisher test_twist_publisher.cpp)
53-
ament_target_dependencies(test_twist_publisher rclcpp_lifecycle)
54-
target_link_libraries(test_twist_publisher ${library_name})
47+
target_link_libraries(test_twist_publisher ${library_name} rclcpp::rclcpp ${geometry_msgs_TARGETS})
5548

5649
ament_add_gtest(test_twist_subscriber test_twist_subscriber.cpp)
57-
ament_target_dependencies(test_twist_subscriber rclcpp_lifecycle)
58-
target_link_libraries(test_twist_subscriber ${library_name})
50+
target_link_libraries(test_twist_subscriber ${library_name} rclcpp::rclcpp ${geometry_msgs_TARGETS})
5951

6052
ament_add_gtest(test_validation_messages test_validation_messages.cpp)
61-
ament_target_dependencies(test_validation_messages rclcpp_lifecycle)
62-
target_link_libraries(test_validation_messages ${library_name})
53+
target_link_libraries(test_validation_messages ${library_name} ${builtin_interfaces_TARGETS} ${std_msgs_TARGETS} ${geometry_msgs_TARGETS})

0 commit comments

Comments
 (0)