伪目标 .PHONY
如果Makefile下存在clean这个文件或者目录,make clean就不会执行。为了告诉Make, clean不是一个文件名或者目录名,需要将其设置为伪目标。那么make clean就可以执行了。
.PHONY: clean
clean:
rm *.o temp
禁止输出 @
make默认会将命令执行的结果重定向到标准输出,如果想要忽略输出,可以使用@前缀符。
test:
@echo wangdd
忽略错误 -
下面的命令,如果docker rm -f nginx执行失败,则后续的执行就不会执行。为了避免这种情况。可以在命令前增加-, 标志这个命令无论执行成功与否,都继续执行。
restart:
docker rm -f nginx;
docker rm nginx;
restart:
-docker rm -f nginx;
docker rm nginx;
在目标中设置变量
一般情况下,变量都是在Makefile的开头设置。但是我们也可以使用 .ONESHELL: 让多个命令共享变量,这样后续的命令就可以获取前面的设置的变量了。
.ONESHELL:
sip-conf:
export image=hello;
echo $${image}
获取shell输出
以下两种方式都可以获取shell输出。
- 用shell的方式是变量定义的时候,就已经计算出来时间了
- 用``的方式,是在命令真正执行的时候,也就到达第六行的时候,才会去计算now2的值。
now=$(shell date +%s)
now2=`date +%s`
test:
echo "hello" > test.$(now).log
test2:
echo "hello" > test2.$(now2).log