本系列文章主要是对GNU make官方文档的翻译,会加入自己的理解以及实例代码。
1. 简介
GNG make由Roland McGrath 和 Richard Stallman 实现, 3.76版本以后由 Paul D. Smith 维护,其遵循 IEEE Standard 1003.2-1992(POSIX.2)标准。
make主要用来管理和简化大型程序的编译工作,适用于任何语言(只要该语言有对应的编译器或者解释器),你所要做的只是编写对应的makefile,在需要编译时输入make指令即可。事实上make不限于程序代码的编译, 你可以用它来完成任何类似的工作,比如在某些文件发生变化,必须自动更新另外一些文件时。
要使用make,你必须编写一个描述你程序文件依赖关系的makefile文件,并在其中提供更新程序文件的命令。例如,在一个程序中,可执行文件依赖于中间文件object的更新,而中间文件又依赖于源文件的编译。也就是说makefile文件告诉make程序该如何编译和链接程序。
2. Makefile简单介绍
2.1 makefile简单规则
简单的makefile文件遵循以下格式(下文中称此为标准格式):
target ... : prerequisites ...
recipe
...
...
target
为目标文件(也可以是make
要执行的动作,如clean
), prerequisites
为依赖文件, recipe
为make
要执行的编译规则。省略号表示target
,prerequisite
,recip
可以有多个。需要注意的是recipe
前面必须要有一个tab
键输入(或者可以通过设置变量.RECIPEPREFIX
使用别的起始字符),这是makefile
的语法规则。recipe
其实就是一条命令,它通过对prerequisites
进行一系列处理生成target
文件。有时候prerequisites
并不是必须的,例如当target
是clean
命令时,不需要prerequisites
。
2.2 简单示例
下面是一个关于上面描述的完整而简单示例:
edit : main.o kbd.o command.o dilplay.o \
insert.o search.o files.o utils.o
gcc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
gcc -c main.c
kbd.o : kbd.c defs.