我有一个Makefile,它在应用构建规则之前运行工具开始(这个工具为我写的).如果这个工具是一个python脚本,以非空状态代码退出,我希望GNU Make在那里停止,而不是继续构建程序.
目前,我做这样的事情(顶级,即第1列):
$(info Generating build rules...) $(shell python collect_sources.py) include BuildRules.mk
但是如果collect_sources.py
退出时状态代码为1,则不会停止make .这也会捕获标准输出collect_sources.py
但不打印出来,所以我感觉我看错了方向.
如果可能的话,解决方案甚至应该在简单的MS-DOS shell是标准系统shell时工作.
有什么建议吗?
可能有更好的方法,但我尝试了以下内容并且它有效:
$(if $(shell if your_command; then echo ok; fi), , $(error your_command failed))
在这里,我确实假设your_command
不提供任何输出,但解决这种情况应该不难.
编辑:为了使它可以使用默认的Windows shell(可能是任何体面的shell),你可以编写your_command && echo ok
而不是if
在shell
函数内.我不认为这对于(较旧的)DOS shell是可能的.对于这些,您可能希望调整your_command
或编写包装器脚本以在错误(或成功)上打印某些内容.