ROS2 CMakeLists.txt package.xml

ROS2 CMakeLists.txt

cmake 复制代码
cmake_minimum_required(VERSION 3.8)
project(bumperbot_cpp_examples)

# 设置编译器警告选项
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# 查找并加载ROS 2和C++客户端库相关的包
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

# 添加可执行文件目标
add_executable(simple_publisher src/simple_publisher.cpp)

# 设置可执行文件的依赖项
ament_target_dependencies(simple_publisher rclcpp std_msgs)

# 安装可执行文件
install(TARGETS simple_publisher DESTINATION lib/${PROJECT_NAME})

# 如果启用了测试构建,则查找并运行代码检查工具
if(BUILD_TESTING)
    find_package(ament_lint_auto REQUIRED)
    # 注意:以下两行在实际项目中可能是不必要的,除非有特定需求
    # 这里只是为了展示如何设置这些变量,但在ament_lint_auto中它们可能不是必需的
    set(ament_cmake_copyright_FOUND TRUE)
    set(ament_cmake_cpplint_FOUND TRUE)
    ament_lint_auto_find_test_dependencies()
    # 通常,你会在这里添加测试目标,但这里没有给出具体的测试文件
endif()

# 生成CMake包配置文件
ament_package()

逐一解释这段代码中的每行指令,以及它们的作用。这段代码是一个CMake脚本,用于配置和构建C++项目,特别是与ROS 2相关的项目。CMake是一个跨平台的自动化构建系统,它使用文本文件CMakeLists.txt来指导构建过程。

cmake 复制代码
cmake_minimum_required(VERSION 3.8)

这行指定了构建这个项目所需的最小CMake版本是3.8。这是为了确保CMake拥有所有必要的特性和兼容性。

cmake 复制代码
project(bumperbot_cpp_examples)

这里定义了项目的名称,即bumperbot_cpp_examples。这个名称将用于在构建过程中引用整个项目。

cmake 复制代码
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    add_compile_options(-Wall -Wextra -Wpedantic)
endif()

这个条件块检查是否使用的是GCC或Clang编译器。如果是,它将添加一些编译选项,这些选项会增加编译时的警告和错误检查级别。-Wall启用大多数警告,-Wextra启用额外的警告,-Wpedantic要求编译器遵循严格的ISO C++标准。

cmake 复制代码
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

这些行使用find_package命令来查找并加载其他CMake包。ament_cmake是ROS 2的一部分,提供了额外的CMake函数和宏。rclcpp是ROS 2的C++客户端库,提供了与ROS 2通信的功能。std_msgs包含了ROS 2中常用的标准消息类型。

cmake 复制代码
add_executable(simple_publisher src/simple_publisher.cpp)

这行代码定义了一个可执行文件目标,名为simple_publisher,并指定其源文件为src/simple_publisher.cpp

cmake 复制代码
ament_target_dependencies(simple_publisher rclcpp std_msgs)

这行代码将rclcppstd_msgs包作为simple_publisher目标的依赖项。这意味着在构建simple_publisher之前,CMake会确保这些依赖项已被正确配置。

cmake 复制代码
install(TARGETS simple_publisher DESTINATION lib/${PROJECT_NAME})

这行代码指定了安装simple_publisher可执行文件的目标路径。${PROJECT_NAME}变量会被替换为项目名称,即bumperbot_cpp_examples。因此,可执行文件将被安装到lib/bumperbot_cpp_examples目录下。

cmake 复制代码
if(BUILD_TESTING)
    find_package(ament_lint_auto REQUIRED)
    set(ament_cmake_copyright_FOUND TRUE)
    set(ament_cmake_cpplint_FOUND TRUE)
    ament_lint_auto_find_test_dependencies()
endif()

这个条件块检查是否启用了测试构建(BUILD_TESTING)。如果是,它会查找ament_lint_auto包,该包用于自动发现和运行代码检查工具。接下来,它设置两个标志变量为TRUE,尽管这些设置可能在实际项目中是多余的,除非它们被某些后续操作检查。最后,它调用ament_lint_auto_find_test_dependencies函数来查找与代码检查相关的依赖项。

cmake 复制代码
ament_package()

最后,这行代码调用ament_package宏,该宏是ROS 2中用于生成CMake包配置文件的。这使得其他CMake项目能够找到并使用这个包。

ROS 2 XML结构文件

xml 复制代码
<?xml version="1.0"?>  
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>  
<package format="3">  
  <name>bumperbot_cpp_examples</name>  
  <version>0.0.1</version> 
  <description>TODO: Package description</description>
  <maintainer email="antonio.brandi@outlook.it">alien</maintainer>  
  <license>TODO: License declaration</license>
  
  <buildtool_depend>ament_cmake</buildtool_depend> 
  
  <depend>rclcpp</depend>  
  <depend>std_msgs</depend>  
  
  <test_depend>ament_lint_auto</test_depend>  
  <test_depend>ament_lint_common</test_depend>  
  
  <export>  
    <build_type>ament_cmake</build_type>  
  </export>  
</package>

这段XML代码定义了一个ROS 2包的基本结构,包括包的名称、版本号、描述、维护者信息、许可证声明、构建工具依赖、包依赖以及测试依赖等。此外,还指定了构建类型为ament_cmake,这是ROS 2中常用的构建系统。

相关推荐
奔跑中的小象2 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南3 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang3 小时前
LangGraph 状态机实战
人工智能
刹那芳华19923 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作3 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门3 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜3 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟3 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦4 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生4 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能