对新人挺友好的。
==============================
target ... : prerequisites ...
command ... ...
target通常是一个目标文件,也可以是一个操作(伪目标)。
prerequisites就是,要生成那个target所需要的。command也就是make需要执行的命令。(任意的Shell命令)这是一个文件的依赖关系,即target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。如果target不存在,或者prerequisites中如果有文件比target文件要新的话,command所定义的命令就会被执行。
而如果prerequisites中有文件不存在,则递归去执行生成该文件的命令。这就是Makefile的规则。也就是Makefile中最核心的内容。具体使用时,无参数的make会使用第一个目标指令;make xxxx会使用xxxx指令,如果目录中已经存在xxxx,则不执行。
如果target是一个操作(伪目标),而目录中有名为target的文件,按上述规则,则该target不会执行。为了避免这种情况,可以用“.PHONY”明确声明为伪目标。
隐含规则
编译C/C++时,<n>.o 的目标会自动推导为 <n>.c / <n>.cpp
# Makefile 中main : main.o gcc -o main main.o#会自动变为:main : main.o gcc -o main main.omain.o: main.c <-- main.o 这个目标是隐含生成的 gcc -c main.c
更多隐含规则请戳