Cmake基础教程--第1章:初识cmake

从本篇文章开始,我会出一系列文章,致力于Cmake工具的学习使用。阅读本文章之前,
作者默认读者会使用基础的命令行工具且具有C++基础。

何为Cmake

首先,Cmake是一个开源的,跨平台的自动化构建工具,它使用一组简单的描述性语言来生成本地构建环境,使用cmake工具,我们可以很好的去管理我们的项目。

对比于其他编程语言的构建工具,Cmake无疑复杂了很多,但这是由于 C++ 古老的编译模型和关注于底层的特性导致的。也正是由于Cmake的出现,才为C++真正提供了可靠的跨平台解决方案

注意

  • Cmake并非是包管理工具
  • Cmake不仅仅支持C++,Cmake实际支持相当多种语言

对于C++程序员来说,学习Cmake几乎是必经之路。

Cmake的优缺点

优点

  1. 跨平台支持: Cmake是真正的跨平台工具,支持大多数主流的操作系统(相比之下makefile就不具备良好的跨平台性)
  2. 与IDE集成度好: Cmake几乎可以用于生成所有主流IDE的项目文件,使得开发者可以使用自己所习惯的开发环境。
  3. 广泛的社区支持: CMake 拥有庞大的用户群和活跃的社区,这意味着有大量的文档、教程和示例可供参考,遇到问题时也容易找到解决方案。

缺点

  1. 学习成本高: Cmake是一门语言,初学者需要花相当大的精力来学习
  2. 更新频繁: Cmake仍旧在发展成长,新版本可能引入不兼容的更改,这要求项目必须持续跟进和适配

Cmake与makefile之间的关系

相信很多人都曾认为过Cmake的功能就是去生成对应的makfile,其实这样的认知是错误的。
Cmake并不一定会生成Makefile,这是由你使用的编译器决定的,只是由于大部分情况是
生成makefile,才给了大家错误的认知。

也由于Cmake构建项目时并不一定会生成makefile,所以不建议cmake搭配make使用。

C/C++ 如何编译为可执行文件

在正式学习Cmake之前,先来了解一下C/C++的基本编译原理。一般来说,可以分为以下四步:

  • 预处理: 进行宏替换,展开内联函数,处理条件编译指令(#if之类),以及将头文件内容插入到当前文件中,经过预处理阶段后,源文件会变为一个没有预处理指令的干净的文件。
  • 编译 读取预处理后的源代码并将其转换为汇编代码或目标代码,在此期间,译器还会进行各种优化,以提高生成代码的效率。
  • 汇编 汇编器将汇编代码转换为机器语言指令的二进制形式,也就是目标代码或对象文件。每个源文件通常会被编译和汇编成单独的对象文件。
  • 链接 链接器解析未定义的符号引用,将它们与定义在其他模块或库中的符号匹配。链接器还会重定位代码和数据,使其在内存中处于正确的地址,同时合并数据段和代码段,生成最终的可执行文件。

一个最简单的Cmake示例

我们在项目目录中编写一个名为main.cpp的源文件,接下来演示如何使用Cmake来构建这个
简单项目。
main.cpp

  1. 编写 CMakeLists.txt 文件
    在工程目录下编写一个名为CMakeLists.txt的文件,这里注意大小写不要拼错。在CMakeLists.txt中编写以下代码:
cmake_minimum_required(VERSION 3.20) #指定最小版本
project(HELLO) #指定项目名
add_executable(test main.cpp) #指定由源文件main.cpp生成可执行文件test

这里注意#为cmake语法中的注释,每行代码的功能已经在代码中指出,使用该cmake可以使用main.cpp来编译出可执行文件test。其中project指定的项目名与生成的可执行文件名称并无关系。

  1. 使用cmake生成makefile或其他文件
    在工程目录使用以下命令来生成makefile或其他的文件(注意这里的环境会生成makefile,但这并不是绝对的,例如在msvc下就不会生成makefile而是其他的文件,后文均以makfile举例)
cmake -B [目录名称]

如下:
cmake -B build
该命令会指定一个文件夹的名称,然后生成这个目录,会将makefile相关的文件放入build目录中,注意,在大部分情况下,我们都不应该修改该目录下的文件内容。
3. 生成项目
使用如下命令来生成项目:

cmake --build [目录名称]

如下:
build
命令的目录应当与上一步生成的目录一致,执行完之后,会在该目录下生成对应的可执行文件。注意,在本例中,你直接在build的目录下使用make命令也能编译得到正确的可执行文件,但这不是我们赞成的行为。

至此,你就完成了一个最简单的Cmake的工程构建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值