makefile侧面说明一个人是否具备大型工程的能力。makefile帮助实现自动编译,提高软件开发效率。常使用Linux下GNU的make。
把源文件编译成中间代码文件(.o文件)叫编译(compile)。
把.o文件合成执行文件,叫链接(link)。
编译时需要语法正确、函数与变量声明正确。通常需要告诉编译器头文件的位置(头文件中声明,源文件中定义),只要语法正确,就可以编译出目标文件。一般来说,每个源文件对应一个目标文件。
链接时,主要链接函数(找函数实现)和全局变量。链接只需要目标文件,但源文件太多,生成目标文件太多,链接不方便,故打包成.a文件。
make命令执行,需要一个Makefile文件。
加入新的源文件,只需编译链接新的源文件即可。加入新的头文件,需要编译引用头文件的源文件,并链接程序。
target(目标文件):prexxxxx(所需文件)
[tab]command(需执行指令)
常见变量
$@–目标文件
$^–所有依赖文件
$<–第一个依赖文件
cc -c 源文件(c)
cc -o 目标文件(exe) 链接文件(o)
\换行符
make比较target和prexxx的日期,prexxx新或target不存在,则执行后续定义。
make clean(删除执行文件和目标文件)
make如何工作
objects = main.o kbd.o display.o \
insert.o search.o files.o utils.o
$(objects)
make自动推导
.PHONY:clean
clean:
-rm edit$(objects)
Makefile包含显示规则、隐晦规则、变量定义、文件指示和注释。
GNU的make工作时执行步骤
1读入所有Makefile
2读入被include的其他Makefile
3初始化文件的变量
4推导隐晦规则
5为所有目标文件创建依赖关系链
6决定哪些目标要重新生成
7执行生成命令
Makefile中只有一个最终目标