Bob*_*Bob 7 c++ makefile gnu-make
在中make,是否可以为每个目标定义前食谱和后食谱?
我想(隐式)在显式配方的第一行上方插入前食谱,然后(隐式)在显式配方的最后一行之后插入后食谱。
使用正则表达式插入行会很容易,但是隐式行会更干净。
您可以创建一个特殊的辅助 shell,在其输入脚本之前和之后执行所需的前后操作,并告诉make使用该 shell 执行配方(SHELL为此使用变量)。
此外,如果您使用多行配方,则必须启用该.ONESHELL模式。
警告:在这种模式下,失败的命令(除了最后一个)不会违反规则,因此您必须使用 加入命令
&&,或者附加|| exit 1到每个命令的末尾,或者使用-e选项运行真实的 shell 。
例子:
前壳
#!/bin/bash
preaction()
{
echo "Pre-action"
}
postaction()
{
echo "Post-action"
}
preaction && /bin/bash "$@" && postaction
Run Code Online (Sandbox Code Playgroud)
生成文件
SHELL=./pre-post-shell
all: Hello Bye
.ONESHELL:
Hello:
@echo Hello
echo Hello again
Bye:
@echo Bye
Run Code Online (Sandbox Code Playgroud)
输出:
$ make
Pre-action
Hello
Hello again
Post-action
Pre-action
Bye
Post-action
Run Code Online (Sandbox Code Playgroud)