概览


Makefile是GNU make自动化编译工具的规则文件,Makefile定义了项目的编译规则,指明了哪些文件需要先编译、哪些后编译,以及文件间的依赖关系。 make可以执行操作系统命令,从而自动化编译过程。Makefile的核心在于“文件依赖性”管理,确保只编译那些真正需要更新的文件。 借助于“文件依赖”可以完成其他一些自动化任务,文中提到的make工具,在没有特别说明情况下指的是GNU make 官网:https://www.gnu.org/software/make/

安装make

GNU make虽然可以在Windows系统上安装使用,但是折腾成本还是比较高;推荐在Linux、Macos、Unix系统上学习使用,make -v 查看安装情况:

GNU Make 4.3
为 x86_64-pc-linux-gnu 编译
Copyright (C) 1988-2020 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律允许的范围内没有其他保证。

若系统上没有安装make,使用系统相应的包管理器安装,比如Ubuntu:sudo apt-get install make

编译和链接

虽然Makefile可以完成许多自动化任务,编译项目是其最常用的场景
编译: 把源文件(如C/C++文件)转换为中间目标文件(Windows下为.obj,Unix-like下为.o)。编译器检查语法和函数、变量的声明是否正确,但不检查函数的具体实现。只要语法和声明无误,就能生成中间目标文件。

链接: 将多个中间目标文件(或库文件)合并成可执行文件(Windows下为.lib,Unix-like为.a)。链接器负责查找函数和全局变量的实际定义。如果链接器找不到某个函数的定义,就会报错(如VC中的“Link 2001错误”),这时需要确保所有必要的中间目标文件或库文件都已正确指定。