在Make中,如何使配方仅在特定的退出代码上失败?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Make中,如何使配方仅在特定的退出代码上失败?相关的知识,希望对你有一定的参考价值。
我的Makefile中有一个返回0,1或2的配方。如果命令返回1,我希望配方成功,而在所有其他情况下都失败。我可以使用!
来反转状态,但是当食谱返回2和0时我想失败。
我的具体用例:我将拼写检查作为构建过程的一部分。到目前为止我能做的最好的是:
.md.html:
! $(ASPELL) list -p $(DICT_FILE) < $< | $(GREP) -nFf - $<
$(PANDOC) -o $@ $<
aspell(1)
生成一个它不理解的单词列表并将其传送给grep(1)
。 grep(1)
使用用户友好的行号打印它们,以便作者轻松找到降价源。无论比赛如何,aspell(1)
总是返回0。 grep(1)
的手册页说:
如果选择了行,则退出状态为0;如果未选择行,则退出状态为1;如果发生错误,则退出状态为2。
答案
您必须自己使用shell语法进行检查。像这样:
.md.html:
$(ASPELL) list -p $(DICT_FILE) < $< | $(GREP) -nFf - $<; [ $$? -eq 1 ]
$(PANDOC) -o $@ $<
仅当前一个命令(grep)的退出代码正好为1时,测试才会成立(并且成功退出)。
以上是关于在Make中,如何使配方仅在特定的退出代码上失败?的主要内容,如果未能解决你的问题,请参考以下文章
无法从源安装 python 3.6.3:目标“Programs/python.o”的配方失败