CMake的应用与实践

CMake 简介

CMake是什么?

  • 全称 Cross Platform Make,起初为了跨平台需求,而后不断完善并广泛使用
  • 一款优秀的工程构建工具

特点和优势

  • 开放源代码,具有BSD许可
  • 跨平台,支持Linux,Mac和Windows等不同操作系统
  • 编译语言简单,易用,简化编译构建过程和编译过程
  • 编程高效(比autotools快40%),可扩展(ros钟catkin,ament,colcon都是基于cmake构建)

CMake与其他编译工具的对比

  • GCC

    • 由GNU开发的编译语言译器,C/C++,java等语言开发
    • 当项目比较简单,可以使用gcc/g++编译目标和项目
    • 比较复杂的项目,用gcc组织编译架构极其困难
  • MakeFile

    • MakeFile是有条理的gcc编译命令的文件,利用make工具来执行MakeFile文件的编译指令
    • 程序 简单,可以手写MakeFile
    • 程序复杂,利用CMake和autotools来自动生成MakeFile。
  • Autotools

    • autotools是一个工具集,具有灵活性较大,对用户角度使用较为友好(cmake生成文件权限较多)
    • 开发步骤太多,配置繁琐(autoscan+autocconf+automake)
    • 通常编译的config文件,大多通过autotools构建的,最终生成Makefile和config.h文件
  • CMake

    • CMake类似Make工具功能,用来“读取”并执行CMakeLists.txt文件的语句,最终生成Makefile文件
    • CMake语言开发简单,易于理解

CMake语句的主体框架

主体框架:

  • 工程配置部分:工程名、编译调试模式、编译系统语言
  • 依赖执行部分:工程包,头文件、依赖库等
  • 其他辅助部分(非必需):参数打印、遍历目录等
  • 判断控制部分(非必需):条件判断、函数定义、条件执行等

在这里插入图片描述
在这里插入图片描述

CMake的常用指令以及变量

基本常用指令

  • ADD_EXECUTABLE

    • 为源文件的编译添加由-D引入的宏定义
    • 命令格式为 : add_definitions(-DFOO -DBAR ...)
    • 宏定义操作:
      在这里插入图片描述
  • OPTION

    • 提供用户可以选择的选项。
    • 命令格式为 :option(<variable> "description [initial value])

在这里插入图片描述

  • ADD_CUSTOM_COMMAND/TARGET

    • [COMMAND] : 为工程添加一条自定义的构建规则。
    • [TARGET] : 用于给指定名称的目标执行指定的命令,该目标没有输出文件,并始终被构建。
      在这里插入图片描述
  • ADD_DEPENDENCIES(没懂)

    • 用于解决链接时依赖的问题。
    • 当定义的target依赖的另一个target,确保在源码编译本target之前,其他的target已经被构建,使用该语句。
  • INSTALL

    • 用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。
      在这里插入图片描述
  • TARGET_INCLUDE_DIRECTORIES

    • 设置include文件查找的目录,具体包含头文件应用形式,安装位置等。
    • 命令格式为:target_include_directories(<target>[SYSTEM][BEFORE]<INTERFACE|PUBLIC|PRIVATE> [items])
      在这里插入图片描述
  • SET_TARGET_PROPERTIES

    • 设置目标的一些属性来改变它们构建的方式。
    • 命令格式为:
      在这里插入图片描述
  • ENABLE_TESTING/ADD_TEST

    • [enable_testing] :用来控制Makefile是否构建test目标。
    • [add_test] : 一般需要和enable_testing()配合使用
    • 命令格式为:ADD_TEST(testname Exename arg1 arg2 …)
    • 生成makefile后可用make test执行测试
      在这里插入图片描述

基本常用变量

变量名具体含义
CMAKE_INSTALL_PREFIX构建install的路径
$ENV{HOME}HOME环境下的目录路径
PROJECT_NAME工程名变量
< PKG >_INCLUDE_DIR导入包头文件全路径
< PKG >_LIBRARIES导入库文件的全路径
PROJECT_SOURCE_DIR构建工程的全路径
CMAKE_VERSIONCmake的版本号
CMAKE_SOURCE_DIR源码树的顶层路径

实践应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值