在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”的配方失败

您如何参考柯南索引中的特定配方修订?

如何检查特定文件是不是存在以及使用哪个退出代码?

如何使用 Flutter 访问 Firestore 中特定配方的 documentId?

如何使特定平台可以访问功能? [复制]