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 来构建项目的工具,如图:

相关推荐
Wang's Blog7 小时前
Go-Zero项目开发39: 熔断、限流与降级的高可用实践
开发语言·后端·golang·go-zero
Alan_6917 小时前
第三方API对接的通用封装模式
服务器·开发语言·php
霸道流氓气质7 小时前
Java中集成Weka 技术教程:从入门到工程实践
java·开发语言·数据挖掘
懿路向前7 小时前
【HarmonyOS学习笔记】2026-07-26 | @Trace 序列化 __ob_ 前缀陷阱与消息持久化
笔记·学习
一只小菜鸡..7 小时前
南京大学 操作系统 (JYY) 学习笔记:可执行文件、链接器与 Shebang 的彩蛋
笔记·学习
SilentSlot8 小时前
【C/C++】手写 DPDK 协议栈(十二):TCP 并发与自实现 epoll 的就绪事件分发
c语言·c++·tcp/ip
雨落在了我的手上8 小时前
Java数据结构(九):栈和队列
java·开发语言·数据结构
SilentSlot8 小时前
【C/C++】手写 DPDK 协议栈(六):TCP 三次握手、状态机与数据回显
c语言·c++·tcp/ip
j7~8 小时前
【C语言】《C语言自定义类型(结构体+联合体+枚举类型)》--详解
c语言·开发语言·深度学习·结构体·位段·联合体·枚举类型
乱七八糟的屋子8 小时前
AMQP C++ 超详细实战教程(amqp-cpp 开源库从零入门到生产落地)
c++·rabbitmq·任务队列·amqp·流量削峰·c++服务端异步解耦·分布式消息通信