如何使用CMake来构建一个c++程序

CMake作用:CMake 是一个跨平台的构建系统,主要用于自动化管理软件的编译过程。它能够帮助开发者生成适合不同操作系统和编译器的构建文件(如 Makefile、Visual Studio 项目文件等),简化复杂项目的构建和依赖管理。

直接以一个简单的c++程序为例,说明CMake的使用。
首先创建一个文件夹hello,然后在该文件夹下创建写一个hello.cpp,代码如下:

using namespace std;
int main()
{
    cout <<"Hello world!"<< endl;
    return 0;
}

然后创建CMakeLists.txt文件,CMakeLists.txt文件的作用是告诉cmake要对这个文件夹(hello文件夹)下的文件做什么,名字一定不能错,不然可能会构建失败。在CMakeList.txt文件中写入以下内容:

cmake_minimum_required(VERSION 2.8) #指定CMake的最小版本要求
project(helloworld) #定义工程名称
add_executable(helloworld helloworld.cpp) #生成可执行文件

接下来打开终端,输入:

cmake .

还有一种构建方式是在主程序同级目录下,再新建一个build文件夹,进入此文件夹,使用cmake …构建文件,这样做是为了在构建过程中生成的构建文件,全部都在build文件夹中,便于管理。
构建如图:
在这里插入图片描述在此过程中,多了三个文件和一个文件夹:
在这里插入图片描述

CMakeCache.txt文件:
这是一个缓存文件,用于存储CMake过程中的配置信息。包括了查找的库,、头文件、编译器路径、变量值等信息。当再次运行CMake 时,CMake 会首先检查这个文件,以便快速获取之前的配置,避免重复查找和检查。显著加快配置时间。可以手动编辑这个文件,修改一些配置参数(如编译选项、库路径等),或者在命令行中使用 -D 选项设置变量,CMake 会将其写入缓存。

内容片段如图:
在这里插入图片描述cmake_install.cmake:
cmake_install.cmake 文件包含了安装目标和规则,用于指定在运行 make install 时应该执行哪些操作。比如将可执行文件、库文件、头文件等复制到系统的指定位置(如 /usr/local/bin、/usr/local/lib 等)。
内容片段如图:
在这里插入图片描述
CMakeFiles 文件夹:
MakeFiles 文件夹包含 CMake 生成过程中的临时文件和中间文件。这些文件用于管理构建过程的各种信息,包括依赖关系、目标信息、生成的 Makefile 等。该文件夹中有多个文件,支持 CMake 的并行构建特性。若构建过程出现错误,可以在 CMakeFiles 文件夹中找到日志和其他调试信息,帮助定位问题。
其子文件如图所示:
在这里插入图片描述Makefile文件:
这个是核心文件,它定义了如何编译和链接程序的规则。CMake 在生成 Makefile 文件时,会根据项目的配置和文件结构自动创建相应的 Makefile。
Makefile 包含了一系列指令,告诉 make 工具如何编译和链接源代码文件生成可执行文件或库
通过定义不同的目标(targets),Makefile 允许用**通过简单的命令(如 make)**来自动执行复杂的构建过程,无需手动输入每个编译命令。
代码片段如图:
在这里插入图片描述

接下来输入:

make

在这里插入图片描述目录中出现了一个可执行程序
在这里插入图片描述

运行可执行程序。

./helloworld

在这里插入图片描述
顺利执行。

整个过程来看,只需要维护一个CMakeLists.txt文件即可。

这样做有一个问题就是主程序和构建过程生成的文件混在了一起,不容易删除。如前面所述,可以新建一个build文件夹,然后在该文件夹下进行构建。命令如下:

mkdir build 
cd build
cmake ..
make

在这里插入图片描述此时可执行程序以及cmake生成的所有文件都在build目录下如图:

在这里插入图片描述
主目录下没有任何生成文件。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺的碎冰冰~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值