简介:
使用makefile记录项目各个文件的依赖关系,make程序会根据依赖关系从底层开始执行编译命令,最后生成最终目标文件。使用makefile可以方便编译多个相互依赖的源文件最终生成目标文件。
makefile格式:
makefile以命令为单位组成,2行组成一个命令。第一行冒号前的是本命令的目标生成文件,冒号后面是依赖文件。第二行是生成目标文件需要执行的指令,注意指令前要空TAB。
file:file1.o file2.o 附属行(文件的依存关系) gcc -o file1.o file2.o 命令行 file1.o:file1.c head.h gcc -c file1.c file2.o:file2.c head.h gcc -c file2.c
makefile第一个命令是生成最终目标文件,下面的命令依次生成最终生成文件的依赖文件。比如最终目标是生成file,依赖于file1.o file2.o,此时它们还不存在。于是继续往下查找,到第二个命令需要生成file1.o,需要file1.c head.h,此时当前文件夹中包含这两个文件,于是执行gcc -c file1.c命令。最后,file1.o file2.o都生成了,便可生成最终的file。因此,makefile是从下往上回溯的。
makefile文件必须命名为“makefile”或“Makefile”并存放于项目文件夹中。使用makefile的时候只需在项目文件夹下输入命令make即可。
一个makefile生成两个可执行文件,并删除中间文件:
例如,编译server_udp.c和client_udp.c生成两个可执行文件server_udp和client_udp
all:server_udp client_udp #rm *.o server_udp:server_udp.c gcc server_udp.c -o server_udp client_udp:client_udp.c gcc client_udp.c -o client_udp
all是一个虚拟的总目标,依赖于我们需要生成的两个可执行文件,由于它是虚拟的,并不需要命令操作,因此下行的命令留空即可。由于最终目标的命令是最后执行的,因此也可以用rm *.o来删除所有.o的临时文件。
makefile功能十分强大,这里只是介绍了最基本最常用的功能而已。