注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
CoderX9527的个人空间 https://home.eeworld.com.cn/space-uid-1479210.html [收藏] [复制] [分享] [RSS]
日志

《CMake 构建实战-项目开发卷》阅读分享4—构建初探

已有 142 次阅读2024-10-28 19:47

 

杂谈

CMaker 初学者容易犯的一个迷糊就是:CMake 调用编译工具链生成可执行文件。其实并不是这样的,在构建流程中,CMake 读取 CMakeLists.txt 文件生成 Makefile 或者 Visual Studio 工程或者其他构建工具的配置文件,通过它们来实际调用各种命令完成构建。
CMake 最常用的命令有如下两条
第一条命令,根据生成器生成配置文件,这里指定生成器为 Unix Makefiles
cmake -S . -B build -G “Unix Makefiles”
此命令运行结束会在 build/ 目录下生成 Makefile 文件,以及 CMakeCache.txt 文件。
第二条命令,进入 build/ 目录并开始编译,注意并不是 CMake 调用编译工具而是CMake在 build/ 目录根据指定的生成器,由对应的构建工具调用工具链开始编译。
cmake –build build
此命令并不是由 CMake 来调用编译工具执行编译,而是由 make 处理 Makefile 进而调用编译工具开始编译。
总而言之,CMake 本身并不实际调用编译器和链接器,而是根据整个构建流程,生成 Makefile 或者其他构建工具的配置文件,通过它们来实际调用各种命令完成构建,因此 CMake 常被称为构建系统生成器。

CMake 项目的生命周期

CMake 构建系统生成器在构建项目的过程中涉及到两个重要的阶段:一是执行 CMake 目录程序的阶段,二是根据程序执行结果生成构建系统配置文件的阶段。
命令行输入 cmake –help 可以查看当前 CMake 可执行程序支持的系统生成器,如下图所示:

构建模式

不同的构建模式分别对应一系列不同的预制编译链接选项。CMake 默认提供了如下四种构建模式:
  • Debug 调试模式,禁用代码优化,便于调试;
  • Release 发布模式,启用代码优化并针对速度优化,启用内联并丢失调试符号,几乎无法调试;
  • RelWithDebInfo 发布调试模式,启用代码优化,但保留符号且不会内联函数,仍可调试;
  • MinSizeRel 最小体积发布模式,启用代码优化,但针对二进制体积进行优化,使其尽可能小;

使用命令行根据不同构建模式编译

针对同一份代码用两种构建模式进行构建:Debug 和 Release 模式
进入 mylib 目录,先创建两个目录 build-debug 和 build-release 目录,分别进入两个目录,一个通过命令行传输 -DCMAKE_BUILD_TYPE=Debug 一个传入 -DCMAKE_BUILD_TYPE=Release
在 build-debug 目录:
# 设置构建模式为 Debug 模式
cmake -DCMAKE_BUILD_TYPE=Debug ..
# 开始编译
cmake –build . –config=Debug
在 build-release 目录
输入命令 cmake -DCMAKE_BUILD_TYPE=Release .. 生成配置文件
输入命令 cmake --build . –config=Release 开始构建

安装和打包

略过,嵌入式MCU 开发,一般都不需要安装和打包,因为库文件和可执行文件都在同一个SDK中。如果有外部一来,一般是拷贝到同一个SDK中。

CMake 命令行的使用

命令行:配置和生成

为了配置一个CMake 项目并为其生成构建系统的配置文件,涉及到以下三个参数:
  • 源文件目录,是项目的入口,应当包含一个 CMakeLists.txt 文件作为顶层入口;
  • 构建目录:又称为二进制目录,一般与源文件不同;
  • 生成器:即构建系统生成器,可以是 Makefile/Visual Studio 等生成器;
有三种调用形式:
cmake [<其他选项>…] <源文件目录>
cmake [<其他选项>…] <已存在的构建目录>
cmake [<其他选项>…] -S <源文件目录> -B <构建目录>

命令行:构建

完整形式为:
cmake –build <构建目录> [<选项>…] [-- <传递给构建系统的选项>…]
构建时的常用选项
--parallel [<并行数量>] 等同于 -j [<并行数量>]
用来指定构建项目的最大并行进程数量。
--target <目标名称>… 等同于 -t <目标名称>…
用于构建 <目标名称> 参数指定的若干个目标,多个 <目标名称> 参数用空格隔开。如果省略这个参数,默认构建全部。
--clean-first
要求构建系统在构建目标之前先清理项目生成的文件,即执行 clean 指令构建目标。
--verbose 等同于 -v
此参数用于开启详细的构建日志输出,一般会包含构建的每一步执行的命令行。
 

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章