考虑以下因素:
all:
mv info.h info.h.back
generate_info.sh
compile
mv info.h.back info.h
即使编译失败,如何强制make运行最后一行?
我知道.DELETE_ON_ERROR
但这只涉及在失败时删除目标。
我也知道在编译命令之前添加-
的选项。不幸的是,这将使整个make返回一个良好的错误代码,这是不可接受的。
答案 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
)成功时才会运行。