makefile简单语法
文章目录
make file的基本语法为:
target :needs file
[tab] 命令
main: thanks1.o thanks2.o thanks3.o thanks.o gcc -o main thanks1.o thanks2.o thanks3.o thanks.o thanks.o: thanks.c gcc -c thanks.c thanks1.o: thanks1.c gcc -c thanks1.c thanks2.o: thanks2.c gcc -c thanks2.c thanks3.o: thanks3.c gcc -c thanks3.c
规则1.
target 是要生成的目标文件的名称,needs file 是要生成这个目标文件需要的文件
命令是告诉如何通过需要的文件生成目标文件
例如下面的main
生成main这个目标文件需要 thanks1.o thanks2.o thanks3.o thanks.o 四个文件
所要执行的命令为 gcc -o main thanks1.o thanks2.o thanks3.o thanks.o
规则2.
make 命令默认执行Makefile中第一个target
搜索needs file 的空间是makefile 中的target 以及当前目录
例如;
main会先在Makefile中搜索有没有名称为 thanks1.o 的target
如何找到就先执行这个target(执行规则一样),生成thanks1.o 文件
如何没找到就会在当前目录下寻找thanks1.o 文件
如何还没找到就会报错,说找不到 thanks1.o 文件
规则3.
main: thanks1.o thanks2.o thanks3.o thanks.o
gcc -o main thanks1.o thanks2.o thanks3.o thanks.o
如果当前目录没有thanks1.o 等文件,按照我们上面所说的,上面的代码应该会报错,因为找不到
thanks1.o等文件。
但实际上 Makefile还有一些默认规则:
规则3:
如果needs file为 .o 类型的文件且下面找不到名为.o 的target,以及当前目录中没有*.o 文件
Makefile会默认生成一个名为*.o 的targe
target.o: target.c
cc -c target.o target.c
然后执行这个target,生成*.o 文件
也即是我们以后所有的*.o 的target都可以省略不写
规则4.
同时 Makefile中还可以定义变量
下例中,定义了一个名为 OBJS的变量
OBJS = thanks1.o thanks2.o thanks3.o thanks.o main: ${OBJS} gcc -o main ${OBJS}
规则5.
定义其他的执行动作
前面我们说到,make会默认执行第一个targe
我们也可以定义其他动作
下例中,我们可以使用 make clean 来执行 clean 这个target
OBJS = thanks1.o thanks2.o thanks3.o thanks.o main: ${OBJS} gcc -o main ${OBJS} clean: rm main ${OBJS}