出现以下条件,Makefile文件中的命令会被执行
1、目标文件不存在
2、目标文件所依赖的文件有更新
Makefile格式:
目标文件:依赖文件
[tab] 命令
如:
hello:hello.o a.o
gcc -o hello.o a.o
hello.o:hello.c
gcc -o hello.o -c hello.c
a.o:a.c
gcc -o a.o -c a.c
如果a.c被修改,那么
gcc -o a.c -c a.c
gcc -o hello.o a.o
这两条命令会被执行
如果a.o被删除,那么
gcc -o a.c -c a.c
gcc -o hello.o a.o
这两条命令会被执行
上面的Makefile文件可以写成通配符的形式:
hello : hello.o a.o
gcc -o $@ $^
%.o : %.c
gcc -o $@ -c $<
clean:
rm *.o hello
$@ 目标文件
$^ 两个依赖文件
$< 一个依赖文件
clean 虚拟的目标文件,执行make clean的时候会执行其下的命令
.PHONY作用的理解:
当某条make命令整个链路上的某个目标被设为伪目标,那么这个目标始终被认为不是最新的,伪目标必须是.PHONY,其他形式的目标,如.PH .a .b和普通目标一样
执行make命令时不加参数默认执行的是构造第一个目标(忽略伪目标)的命令
例如:
a:
echo "hi"
b:
echo "hello"
all: a b
echo "ab"
执行结果如下图所示:
执行cd命令,结果不能保存,需要用&&连接
例如:
cd1:
pwd
mkdir -p tmp
cd tmp
pwd
cd2:
pwd && \
mkdir -p tmp && \
cd tmp && \
pwd
执行结果如下: