qmake、CMake、make和Makefile

为了跟踪C++工程的全部部分,要求有一种机制来精确地指定:

  1. 涉及的输入文件,如源代码文件.cpp,头文件.h
  2. 建立程序时所需的工具,如编译器g++.exe,链接器ld.exe,构建工具make
  3. 中间目标文件和它们的依赖关系,如目标文件.o .obj,依赖关系文件.d
  4. 最终的可执行目标文件,如.exe

Makefile

Makefile是一种文本文件,通常用于定义和管理软件项目的构建过程。其和 shell 脚本类似,但其至少包含如下信息:

  1. 用于建立某种文件类型的规则,如为了从 cpp 文件得到 .o 文件,必须对 .cpp 文件执行 gcc-c 指令。
  2. 源文件列表和头文件列表,它们包含工程所需的全部源文件和头文件的名称。
  3. 目标文件,指定了必须建立哪些可执行文件(或者库)
  4. 依赖关系,列出了当某些文件发生改变时,哪些目标文件必须重新建立

make

make是一个用于自动化构建的命令行工具, 它会从 Makefile 中读取工程规范的细节,也会读取提供给编译器的指令,从而自动执行编译、链接等操作,从而构建整个项目。
make 命令会从当前的工作目录下加载名称为 Makefile 或 makefile 的文件 并执行指定的链编步骤(编译并链接)。 它只会重新编译那些发生了变化的文件,或者那些由 变 化而受到影响的文件,而不会盲目地重新编译每一个源文件。

qmake

Qt提供了 qmake 工具,它会根据一个工程文件产生 Makefile 文件,因此不需要手动编写Makefile文件。qmake使用 .pro 文件 作为工程文件,并使用 .pri 文件作为包含项目的模块或部分配置的文件。
关于pro文件的解析请看: QT .pro工程文件模板详解

CMake

CMake 是一个跨平台的开源工具,用于自动生成用于构建项目的Makefile或其他构建系统的配置文件。 CMake 使用 CMakeLists.txt 作为工程文件,来描述项目的构建过程,包括指定源文件、依赖关系、编译选项等。

总结

CMake 和 qmake 只是生成 makefile 文件的两种不同的方式,而 make 才是真正通过 makefile 来构建项目的工具,如图:

相关推荐
hansang_IR7 小时前
【代数与组合数学 | 那忘算 5】生成函数 & 例题 & 卷积
c++·算法·多项式·生成函数·母函数
无忧.芙桃7 小时前
数据结构之排序算法(上):从评价指标到插入、希尔、选择与堆排序
c语言·c++·排序算法
syagain_zsx7 小时前
算法基础篇 · 02 高精度(C++ 题解)
开发语言·c++·学习·高精度
6Hzlia7 小时前
【Classic 150 刷题计划】 LeetCode 242. 有效的字母异位词 | C++ 哈希计数与严密防线
c++·算法·leetcode
wabs6667 小时前
关于二叉树【力扣101.对称二叉树的思考】
数据结构·c++·算法·leetcode·二叉树
白远山7 小时前
无人自助健身平台搭建:从架构设计到设备联动的完整实战
java·开发语言·架构·需求分析
恒锐丰科技林技术员8 小时前
EG2203:一款高性价比 600V 半桥驱动芯片
经验分享·嵌入式硬件·硬件工程
6Hzlia8 小时前
【Classic 150 刷题计划】 LeetCode 228. 汇总区间 | C++ 双游标区间扫描与 to_string 规范
c++·算法·leetcode
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(72):EMA——在写入前决定什么值得记住
论文阅读·人工智能·学习·开源·github
扶风ff8 小时前
练题簿企业培训方案:统一题库、在线任务与岗位考核
学习·小程序