make如何在失败后恢复状态

时间:2017-10-17 20:00:04

标签: makefile gnu-make

考虑以下因素:

all:
    mv info.h info.h.back
    generate_info.sh
    compile
    mv info.h.back info.h

即使编译失败,如何强制make运行最后一行?

我知道.DELETE_ON_ERROR但这只涉及在失败时删除目标。

我也知道在编译命令之前添加-的选项。不幸的是,这将使整个make返回一个良好的错误代码,这是不可接受的。

1 个答案:

答案 0 :(得分:2)

你不能强迫make这样做。您必须自己安排在shell脚本中完成它。 Make会将shell脚本的每个“逻辑行”发送到同一个shell命令。通过在物理线的末尾附加反斜杠,将多条物理线转换为一条逻辑线。

所以,例如:

all:
    mv info.h info.h.back
    generate_info.sh && compile; \
    r=$$?; mv info.h.back info.h; \
    exit $$r

这将保存shell变量r中两个命令的返回码,然后运行mv命令,然后使用保存的结果代码退出shell。

generate_info.sh && compile表示第二个命令(compile)仅在第一个命令(generate_info.sh)成功时才会运行。