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

更多隐含规则请戳这个链接

原文地址:https://www.cnblogs.com/dirge/p/9090309.html