ros2编译工具

ros2编译工具

使用colcon构建ros 功能包

colcon是一个构建软件包集合的命令行工具,是ros构建工具catkin_make, catkin_make_isolated, catkin_tools 和ament_tools的迭代版本,其设计目的是为了开发一款通用的软件包构建工具,可以依赖不同的构建工具(如catkin_cmake, ament_tool等),支持不同的构建系统(如catkin, ament等)。ROS2Bouncy 版本之前的构建工具使用的是ament_tool,之后的构建工具统一使用colcon。

  • colcon最常用的构建命令

    • build

      colcon build #构建当前工作空间的所有package
      colcon build --packages-select  #构建指定的package
      colcon build --packages-up-to  #构建指定的package以及递归构建所有依赖包
      
    • test

      test命令是使用CMake测试工具Ctest测试软件包,可以接受额外的其它参数选项

      colcon test #测试工作空间下的所有package
      
  • colcon常用的参数选项或者技巧

    • --symlink-install # 脚本文件通过软链接方式安装,方便本地迭代调试。

      注意:如果install的文件需要拷贝到另外的机器使用,不要使用这个参数,否则会找不到源文件。

    • --packages-select # 指定package

    • --packages-up-to # 构建指定package以及递归构建所有依赖

    • --cmake-args -DBUILD_TESTING=0 # 在CMake包中禁止配置和构建tests

    • 如果不想编译某个package,可以在对应的文件夹下创建名为COLCON_IGNORE 的空文件

    • 使用模板创建一个新package ros2 pkg create

      通常会使用--dependencies参数指定依赖

ament_cmake使用语法说明

ament_cmake是ros2用于编译构建CMake基软件包的构建系统,一般我们使用模板生成的package清单文件中都会包含ament_cmake依赖说明,而且在CMakeList.txt中也会默认查找ament_cmake包(==find_package(ament_cmake REQUIRED)==)。

  • 指定目标依赖

    ament_target_dependencies

  • ament_export_interfaces

    导出目标库并添加动态库环境,这样库的调用者可以直接使用target_link_libraries(client my_library::my_library)语法调用

  • 构建Library的语法

    #导出库,其调用者可以直接使用target_link_libraries(caller my_library::my_library)语法
    ament_export_interfaces(export_my_library HAS_LIBRARY_TARGET)
    #导出依赖到下游包,下游包在构建的时候不需要重新通过find_package查找这些依赖
    ament_export_dependencies(some_dependency)
    #安装头文件到对应install目录,提供调用者引用
    install(
      DIRECTORY include/
      DESTINATION include
    )
    
    # 安装动态库、静态库、运行程序以及头文件
    install(
      TARGETS my_library
      EXPORT export_my_library
      LIBRARY DESTINATION lib
      ARCHIVE DESTINATION lib
      RUNTIME DESTINATION bin
      INCLUDES DESTINATION include
    )
    
  • 生成msg/srv头文件

    rosidl_generate_interfaces

  • 注册扩展组件

    ament_register_extension(
      "rosidl_generate_interfaces" #扩展点名称,一般是ament_package或rosidl_generate_interfaces
      "rosidl_generator_cpp"  # 包名
      "rosidl_generator_cpp_generate_interfaces.cmake")
    

你可能感兴趣的:(ros2编译工具)