makefile
阮一峰的makefile教程对新人挺友好的。
==============================
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.o
main.o: main.c <-- main.o 这个目标是隐含生成的
gcc -c main.c
更多隐含规则请戳这个链接
诸神对凡人心生艳羡,厌倦天堂。