[linux]makefile使用

简介:

使用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功能十分强大,这里只是介绍了最基本最常用的功能而已。

原文地址:https://www.cnblogs.com/iyjhabc/p/3156767.html