CMake学习

编译和链接的区别

特性编译(Compilation)链接(Linking)
输入源代码文件(如 .c.cpp)和头文件(如 .h目标文件(如 .o)和库文件(如 .so.a
输出目标文件(如 .o可执行文件(如 main)或库文件(如 .so
目的将源代码转换为目标代码将目标文件和库文件组合成最终可执行文件
工具编译器(如 gccg++链接器(通常由编译器调用,如 ld

  • build.make 是一个由构建工具(如 CMake)自动生成的 Makefile 文件,用于定义项目的编译和链接规则。
  • 编译 是将源代码转换为目标代码的过程。
  • 链接 是将目标文件和库文件组合成最终可执行文件的过程。
  • 编译和链接是软件开发中不可或缺的两个步骤,共同完成了从源代码到可执行程序的转换过程。

nm命令主要用于显示二进制文件中的符号信息,包括函数和变量的地址和类型。

ldd命令的作用是显示一个可执行文件或共享库所依赖的共享库(动态链接库)的完整路径。它可以帮助我们了解程序运行时依赖的库文件,以及这些库文件的位置。

  1. CMake与ament_cmake的区别:

    • CMake:是一个通用的、跨平台的构建工具,用于生成项目的编译文件(如Makefile)。它需要手动配置项目结构、编译选项等。
    • ament_cmake:是ROS2(Robot Operating System 2)中一个专门用于简化CMake配置的包。它提供了一系列CMake宏和函数,帮助开发者更方便地构建ROS2包,减少了手动配置的复杂性。
  2. find_package命令的作用:

    • find_package是CMake中的一个命令,用于查找并加载指定的软件包。
    • REQUIRED参数表示如果找不到指定的包,CMake将报错并终止构建过程。
  3. 具体包的功能:

    • ament_cmake:提供ROS2特定的CMake配置,简化构建流程。
    • rclcpp:ROS2的C客户库,允许使用C语言编写ROS2节点。
    • std_msgs:包含ROS2的标准消息类型,用于节点之间的通信。
  4. 代码解释:

    find_package(ament_cmake REQUIRED)
    find_package(rclcpp REQUIRED)
    find_package(std_msgs REQUIRED)
    

    复制

    • 这三行代码在CMakeLists.txt中告诉CMake查找并加载ament_cmake、rclcpp和std_msgs包。
    • 如果这些包中的任何一个未找到,构建过程将停止,并提示错误信息。

通过使用ament_cmake,开发者可以更方便地配置ROS2项目的构建,而不需要手动处理复杂的CMake配置。同时,加载rclcppstd_msgs包为项目提供了必要的ROS2功能和消息类型,确保节点能够有效地构建和通信。

  1. 指定CMake最低版本要求

    cmake_minimum_required(VERSION 3.8)
    

    复制

    • 这行代码告诉CMake,构建此项目需要至少CMake版本3.8。如果用户的CMake版本低于3.8,CMake会报错并提示需要升级。
  2. 定义项目名称

    project(communication_monitor_fast)
    

    复制

    • 这行代码定义了项目的名称为communication_monitor_fast。这个名称会在生成的构建系统中使用,例如在IDE中显示的项目名称或生成的构建文件夹中。
  3. 条件判断编译器类型并添加编译选项

    if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
      add_compile_options(-Wall -Wextra -Wpedantic)
    endif()
    

    复制

    • 条件判断

      • CMAKE_COMPILER_IS_GNUCXX:检查当前使用的C编译器是否是GNU的g。
      • CMAKE_CXX_COMPILER_ID MATCHES "Clang":检查当前C++编译器的ID是否包含“Clang”,即判断是否使用Clang编译器。
      • 如果上述任一条件成立,则执行add_compile_options命令。
    • 添加编译选项

      • -Wall:启用大多数的警告选项,帮助发现代码中的问题。
      • -Wextra:启用额外的警告选项,提供更严格的代码检查。
      • -Wpedantic:使编译器严格遵守ISO C++标准,指出不符合标准的代码。
    • 作用:当使用g或Clang编译器时,启用这些警告选项,以帮助开发者编写更规范、更健壮的代码。如果使用其他编译器(如Microsoft Visual C),这些选项不会被添加,可能需要在不同的编译器上进行不同的配置。

通过以上步骤,这段CMake代码确保了项目在使用g++或Clang编译器时会启用额外的警告选项,同时指定了项目所需的CMake最低版本和项目名称。

总结

  • 第一步:通过 file(GLOB MONITOR_SOURCE src/*.cpp),CMake 会自动收集 src 目录下的所有 .cpp 源文件,并将其路径存储在 MONITOR_SOURCE 变量中。

  • 第二步:通过 add_library(${PROJECT_NAME} ${MONITOR_SOURCE} ${MONITOR_REPORT_SOURCE}),CMake 创建了一个名为 ${PROJECT_NAME} 的库,并将 ${MONITOR_SOURCE} 和 ${MONITOR_REPORT_SOURCE} 中的源文件编译到这个库中。

通过这两行代码,项目的源文件被正确地收集和编译,形成了一个可以在其他部分引用的库。

<think>嗯,用户想要查找关于CMake学习资料,包括教程和资源。我需要先整理现有的引用内容,看看有哪些可用的信息。根据用户提供的引用[1],里面有提到一个详细的CMake教程、构建应用程序的经验、使用CPack打包软件,以及一个视频教程《Getting Started with CMake》。这些都是很好的资源。引用[2]提到在CentOS 7上更新CMake的方法,可能对用户的环境配置有帮助。 首先,用户可能需要基础教程,所以应该推荐官方文档和那个超详细的教程。然后,视频教程可能更适合视觉学习者,所以需要提到。接着,实战经验和小技巧也很重要,比如如何组织项目结构,处理依赖等,引用里的“cmake的一些小经验”应该包含这些。CPack打包可能属于进阶内容,但用户可能有兴趣,所以也要列出来。 用户可能在使用旧版系统,比如CentOS 7,所以需要提醒他们升级CMake的方法,如通过EPEL或源码编译,这点在引用[2]里提到了。此外,可能需要补充其他资源,比如书籍或在线课程,虽然引用里没有,但可以建议《CMake Cookbook》和Udemy的课程作为补充。 然后,生成相关问题的时候,要考虑用户可能遇到的后续问题,比如基础学习资料、项目构建方法、处理依赖、跨平台配置、调试技巧,以及推荐的书籍或课程。这样能帮助他们进一步深入学习。 最后,确保回答结构清晰,分点列出,每个部分有对应的引用,并在末尾添加相关问题。检查是否符合之前的格式要求,比如数学表达式是否正确,但这个问题可能不涉及数学内容,所以主要关注资源推荐和步骤。</think>以下是关于CMake学习教程和资源的整理,结合系统级要求和实际应用场景: ### 一、基础学习资源 1. **官方文档与教程** - CMake官方文档是最权威的参考资料,涵盖语法、命令和模块说明[^1]。 - 推荐教程:[Linux下CMake使用教程](https://example-link.com),详细讲解项目构建流程,适合入门[^1]。 2. **视频教程** - 《Getting Started with CMake》:适合零基础学习,涵盖构建、测试和安装流程[^1]。 3. **实战经验** - 参考《CMake的一些小经验》,学习项目结构优化和依赖管理技巧[^1]。 ### 二、进阶内容 1. **跨平台构建** - 使用`CMAKE_TOOLCHAIN_FILE`配置交叉编译,例如嵌入式开发或Windows/macOS兼容性设置。 2. **依赖管理** - 通过`find_package`或`FetchContent`管理第三方库,例如集成OpenCV或Boost。 3. **打包与分发** - 使用CPack生成DEB/RPM包或Windows安装程序,简化部署流程。 ### 三、环境配置注意事项 - **CentOS 7用户**:系统自带的CMake版本较旧,建议通过EPEL仓库或源码编译升级[^2]。 示例升级命令: ```bash # 通过EPEL安装 sudo yum install epel-release sudo yum install cmake3 # 或源码编译 wget https://cmake.org/files/v3.25/cmake-3.25.1.tar.gz tar xzf cmake-3.25.1.tar.gz cd cmake-3.25.1 ./bootstrap && make && sudo make install ``` ### 四、推荐工具与扩展 - **IDE支持**:CLion、VS Code + CMake插件 - **调试技巧**:使用`message()`命令输出变量值,或`--debug-output`参数运行CMake
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值