2017-10-17 78 views
1

状态考虑以下几点:如何化妆才能恢复失败后

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

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

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

我也意识到在编译命令之前添加-的选项。不幸的是,这将使整个制作返回一个很好的错误代码,这是不可接受的。

回答

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 

这节省了在壳可变r两个命令的返回代码,然后运行mv命令,然后退出与所保存的结果代码的壳。

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