方法的执行方式
· Makefile中的方法本质上就是一条一条的Shell指令。
· 每一行指令都会打开一个新的进程来启动Shell来执行,因此两行间的变量是不互通的!
可以看到a=后面没有输出。
· 为了解决这种问题,可以让所有指令在一个Shell中执行,使用:
.ONESHELL:
可以看到此时a=后面就成功显示了2。
Shell指令的回显
· 你会发现上面的输出会输出三行内容,这个称为Shell语句的回显,即先把指令输出出来,再输出指令的结果。
· 如果希望直接输出指令的结果,只需要在指令前面加上@即可:
可以看到,就直接输出了最后一个echo的内容。
· 但如果一个方法的内容比较多,那就可以使用以下命令来使一整个方法都不输出回显:
.SILENT:
可以看到,也是只输出了echo的内容。
方法中的错误处理
· 在方法中,如果某一条指令无法正确运行,即出现了报错,那后面的指令也不会被执行。因此,需要错误处理。
· 如果希望出错了也继续往后执行,那就在这条指令前面加上减号(-)即可。
可以看到,第一条rm指令报错了,因为不存在hahaha.txt这个文件,可是最后echo还是输出出来了,因为rm指令前面加上了-号,忽略了错误。