gnu make - 强制退出而不删除目标

时间:2017-10-12 15:51:54

标签: makefile gnu-make

我逐步验证我的构建输出,我希望能够在执行给定的配方后退出。

如果原始配方是

$(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD)
    $(Q)$(PYTHON) $(PY_SRC)/makeversionhdr.py $@

我希望能够在最后添加一行

$(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD)
    $(Q)$(PYTHON) $(PY_SRC)/makeversionhdr.py $@
    some_command

some_command应该只是停止执行makefile而不会干扰配方的其余部分。

如果我将some_command设为exit 1,我会

  

../ py / py.mk:269:目标配方' build-gnu / genhdr / mpversion.h'   失败的make: * [build-gnu / genhdr / mpversion.h]错误1 make:*   删除文件' build-gnu / genhdr / mpversion.h'

如果我将some_command设置为$(error),即使在$(error)

之前,配方也不会被执行

是否有这样的命令停止执行makefile但是没有删除目标?

更新
我发现了这个黑客:让.PRECIOUS取决于目标,并添加exit 1作为食谱中的最后一行。

1 个答案:

答案 0 :(得分:1)

如果您要保留的文件是中间文件(未提及作为规则的目标或依赖关系 - 但可能通过模式规则隐含),那么您需要制作它是.DELETE_ON_ERROR:的依赖。

否则,暂时删除或注释掉我们在每个Makefile中放入的import java.lang.exception.*; import java.lang.StackTraceElement; try{ String aux =""; aux = nombre1.getText(); }catch(Exception e ) { StackTraceElement[] stackTraceElement =e.getStackTraceElement(0); int n = stackTraceElement.length; aux = aux+ " -----"; for (int i = 0 ;i<n;i++ ) { aux = aux+ " "+stackTraceElement[i].getLineNumber()+">>"+stackTraceElement[i].getMethodName(); } } return aux;目标就足够了。