package.xml
中包含该功能包的依赖信息,它可以帮助编译工具colcon
确定多个功能包编译的顺序。
CMakeList.txt
当中,必须有1
2find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_lifecycle REQUIRED)
用于生命周期管理,平时可以不添加
例如package
名称为project(first_node)
,必须修改的部分如下1
2
3
4
5add_executable(test_node src/test.cpp)
ament_target_dependencies(test_node rclcpp std_msgs)
install(TARGETS test_node DESTINATION lib/install_node)
target_link_libraries(test_node behaviortree_cpp_v3)
add_executable
不必解释ament_target_dependencies
是官方推荐的方式去添加依赖项。它将使依赖项的库、头文件和自身的依赖项被正常找到。install
是安装库的语句。它将在工作空间生成文件install/first_node/lib/install_node/test_node
ament_package()
最后一句,不要修改。项目安装是通过ament_package()
完成的,并且每个软件包必须恰好执行一次这个调用。ament_package()
会安装package.xml文件,用ament索引注册该软件包,并安装CMake的配置(和可能的目标)文件,以便其他软件包可以用find_package
找到该软件包。由于ament_package()
会从CMakeLists.txt
中收集大量信息,因此它应该是CMakeLists.txt
中的最后一个调用。
可选项
ament_export_dependencies(${dependencies})
这句会将依赖项导出到下游软件包。这样该库使用者也就不必为那些依赖项调用find_package了。