为什么需要CMake

多文件编译与链接

对多文件进行编译时可以直接使用
g++ hello.cpp main.cpp -o main
命令对多文件进行编译和链接。但此操作和单文件编译类似,会将所有文件进行编译。
所以我们可以使用
g++ -c hello.cpp -o hello.o
g++ -c main.cpp -o main.o
两个命令,分别对hello.cppmain.cpp文件进行编译,生成临时文件hello.omain.o-c表示只对文件进行编译,不对文件进行链接。最后再使用
g++ hello.o main.o -o a.out
命令,将两个临时文件进行链接生成最终的可执行文件。
这样的话当我们只对hello.cpp文件进行了更改时,只需要重新执行一遍
g++ -c hello.cpp -o hello.o
命令,将hello.cpp文件进行重新编译,然后再使用
g++ hello.o main.o -o a.out
将两个文件进行链接就可以了,省去了其他未变动文件的编译时间。

make

但当项目文件过多时,我们还一个一个手动的去调用g++ -c xxx.cpp -o xxx.o命令非常麻烦,所以出现了make这个工具,只需要我们写出不同文件之间的依赖关系和生成各文件的规则,如下:
在这里插入图片描述

使用make a.out命令就可以直接构建出最终的a.out的可执行文件。
但是make有如下缺点:
make 的语法和行为在不同平台(如 Linux、macOS、Windows)上可能不一致。
● Makefile 缺乏对模块化项目的良好支持,难以管理大型项目中的多个子项目或库。
make 需要手动编写依赖规则(如.h文件和 .cpp 文件之间的依赖关系)。对于复杂的项目,手动维护依赖关系非常繁琐且容易遗漏。
make 的功能有限,难以支持现代构建需求(如自动化测试、打包、安装等)。需要结合其他工具(如 autotools)来实现更复杂的功能。
所以当项目有跨平台需求、项目比较复杂时,make问题就比较多了。

CMake

所以出现了CMake,针对于make的缺点,CMake有以下优点(一一对应):
CMake 可以生成适用于不同平台的构建文件(如 Makefile、Ninja、Visual Studio 项目文件等)。开发者只需编写一次 CMakeLists.txt,即可在多个平台上构建项目。
CMake 支持模块化项目结构,可以轻松管理多个子项目或库。通过 add_subdirectory target_link_libraries实现模块化构建。
CMake 可以自动检测源文件和头文件之间的依赖关系,无需手动编写。支持第三方库的自动查找和链接。
CMake 支持自定义模块和脚本,可以根据项目需求扩展功能。提供 find_package 机制,方便集成第三方库。

该文档是我在学习了双笙子佯谬UP主的视频之后的一个学习总结,感兴趣的小伙伴可以去看该UP主的原视频:现代C++中的高性能并行编程与优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值