ros2中同一个package的多个cpp节点怎么设置cmake和install
时间: 2024-02-11 14:04:27 浏览: 283
g++、make、cmake三种方式来编译ros2的C++节点
对于同一个 package 中的多个 C++ 节点,您可以将每个节点的源代码放在不同的 `.cpp` 文件中,并将它们添加到同一个 CMakeLists.txt 文件中。例如,假设您有两个节点 `node1` 和 `node2`,它们的源代码分别位于 `src/node1.cpp` 和 `src/node2.cpp` 中,您的 CMakeLists.txt 文件可以这样写:
```
cmake_minimum_required(VERSION 3.5)
project(my_package)
# Find packages
find_package(rclcpp REQUIRED)
# Add executables
add_executable(node1 src/node1.cpp)
add_executable(node2 src/node2.cpp)
# Link libraries
target_link_libraries(node1 ${rclcpp_LIBRARIES})
target_link_libraries(node2 ${rclcpp_LIBRARIES})
# Install targets
install(TARGETS
node1
node2
DESTINATION lib/${PROJECT_NAME}
)
# Install launch files
install(DIRECTORY
launch
DESTINATION share/${PROJECT_NAME}
)
```
在这个 CMakeLists.txt 文件中,您需要使用 `add_executable` 函数来声明每个节点的可执行文件,并使用 `target_link_libraries` 函数来链接节点所依赖的库。
在 `install` 部分,您使用 `install` 命令来安装节点的可执行文件和其他文件,例如 launch 文件。
请注意,如果您的节点需要使用其他 ROS2 软件包,您还需要在这个 CMakeLists.txt 文件中使用 `ament_target_dependencies` 函数来声明节点所依赖的软件包,并在顶层 CMakeLists.txt 文件中使用 `ament_cmake` 和 `ament_package` 宏来声明整个软件包的信息。例如:
```
cmake_minimum_required(VERSION 3.5)
project(my_package)
# Find packages
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
# Add executables
add_executable(node1 src/node1.cpp)
add_executable(node2 src/node2.cpp)
# Link libraries
target_link_libraries(node1 ${rclcpp_LIBRARIES})
target_link_libraries(node2 ${rclcpp_LIBRARIES})
# Declare package
ament_package()
# Install targets
install(TARGETS
node1
node2
DESTINATION lib/${PROJECT_NAME}
)
# Install launch files
install(DIRECTORY
launch
DESTINATION share/${PROJECT_NAME}
)
```
执行 `colcon build` 命令来构建软件包,执行 `colcon install` 命令来安装软件包。安装后,您可以在安装目录中找到您的节点和其他文件。
阅读全文