Make

http://www.ruanyifeng.com/blog/2015/02/make.html

Makefile 文件由一系列规则构成,每条规则的形式如下:

<target>: <prerequisites>
[tab] <commands>

target(目标)

target 通常是文件名,指明 Make 命令所要构建的对象,可以是一个文件名,也可以是多个文件名,之间用空格分隔

main.o:
    gcc -c main.c

上面代码意思为:只要 main.o 文件不存在,那么就执行下面的命令

除了文件名,target 还可以是某个操作的名字,称为「伪目标」(phony target)

clean:
    rm *.o

当输入 make clean 命令之后,所有对象文件就会被删除
但是如果当前目录中正好用一个文件叫做 clean, 那么这个命令就不会执行。 因为 Make 发现 clean 文件以及存在,就认为没有必要重新构建了,也就不会执行下面的命令

为了避免这种情况,可以明确声明 clean 是「伪目标」

.PHONY: clean
clean:
    rm *.o

声明 clean 是「伪目标」之后, Make 就不会去检查是否存在一个叫 clean 的文件, 而是每次运行都执行对应的命令

如果只运行 make 命令而不加参数,那么 Make 会执行 Makefile 文件的第一个目标

prerequisites(前置条件)

前置条件通常是一组文件名,之间用空格分隔。 只要用一个前置文件不存在,或者有过更新(前置文件的 last-modification 时间戳比目标的时间戳新),目标就需要重新构建

main.o: main.c compress.h
    gcc -c main.c

commands(命令)