作者:LGibsion
原文:https://blog.csdn.net/LGibsion/article/details/70854565
1.显示命令:
一般默认make会把命令原样显示出来后再去执行命令,如果我们不需要原样显示命令,则可以在命令前面加一个“@”, 如:
echo building target...
make执行时会输出:
echo building target...
building target...
如果在命令前加了”@”,则不会把命令原样输出:
@echo building target...
make执行时实际在终端看到的输出显示是:
building target...
在调试自己写发Makefile时往往想知道自己写的对不对,但又不想执行Makefile中的命令,而是只想看看自己写的这些命令执行的顺序对不对,这是该怎么办呢?
幸运的是make为我们提供了参数“-n”或者“–just-print”,只要在执行make时在其后面加上该参数即可。如
#:make -n <targetName>
如果嫌执行make后会有大量命令显示刷屏,可以在执行make后面添加参数
“-s”或“–slient”,这样就不会显示任何命令了。 如:
#:make -s <targetName>
2.忽略出错的命令:
如果不希望某条命令因为出错了而导致整个make执行被终止,可以在命令前面加上“-”,表示不管该命令出不出错,后面的命令都将继续执行下去。如:
mkdir dir
如果不加“-”并且dir已经存在,则这条命令就会出错,并将导致整个make执行被终止。
要想不被终止,则要改成:
-mkdir dir
另外,make还有全局的办法:
a. 给make加上参数“-i”或“–ignore-errors”,那么Makefile中的所欲命令都会被忽略错误。
如:
make -i <targetName>
b.如果一个规则是以“.IGNORE”作为目标的,那么这个规则中所有命令都将会忽略错误。如:
.PHONY:clean clean1 .IGNORE clean2
clean:clean1 .IGNORE clean2
clean1:
-rm test $(objs)
.IGNORE:
rm xxxx
clean2:
-rm test2 $(objs2)
假设目标 test (objs)test2(objs)test2(objs2)都存在,但是xxxx不存在,那么执行到rm xxxx时就会出错,由于rm xxxx是在.IGNORE规则下的,make会自动终止.IGNORE规则的执行,但会继续执行后面的clean2规则。如:
$ make clean
rm test test.o
rm xxxx
rm: cannot remove ‘xxxx’: No such file or directory
make: [.IGNORE] Error 1 (ignored)
rm test2 test2.o
如果这里的目标不是.IGNORE,那么执行make clean时就会因为rm xxxx出错而终止,后面的clean2规则的命令不会再被执行了。
:
$ make clean
rm test test.o
rm xxxx
rm: cannot remove ‘xxxx’: No such file or directory
make: *** [clean3] Error 1
c.给make加上参数”-k”或者“–keep-going”,那么如果makefile中某规则中的命令出错了,make会终止改规则的执行,但继续执行接下来的其他规则。如:
make -k <targetName>