伪目标 .PHONY

如果Makefile下存在clean这个文件或者目录,make clean就不会执行。为了告诉Make, clean不是一个文件名或者目录名,需要将其设置为伪目标。那么make clean就可以执行了。

  1. .PHONY: clean
  2. clean:
  3. 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输出。

  1. 用shell的方式是变量定义的时候,就已经计算出来时间了
  2. 用``的方式,是在命令真正执行的时候,也就到达第六行的时候,才会去计算now2的值。
now=$(shell date +%s)
now2=`date +%s`
test:
    echo "hello" > test.$(now).log
test2:
    echo "hello" > test2.$(now2).log