python - 如何在外部脚本错误后强制 make 退出,但在编译错误后不退出

标签 python c makefile build gnu-make

我有一个用 gnu-make 构建的 C 项目。

作为构建过程的一部分,我运行了一些 python 脚本。脚本可能会返回错误(例如 sys.exit(1))。

我希望在 python 脚本返回错误后立即停止构建过程,而不是在“正常”编译错误后。

当我使用 -k 运行 make 时,它​​会在 python 或编译出现错误后继续运行,如果没有它,它在所有情况下都会在第一个错误处停止......

有什么方法可以实现我正在寻找的东西吗?

谢谢。

最佳答案

any way to accomplish what I'm looking for?

是的。

make 不区分配方中的不同命令。它只是将它们提交给 shell 执行,并记录它们的退出状态以确定随后如何继续。因此,如果任何配方中有任何命令的失败会导致 make 停止,那么您不得使用 -k 选项。

如果你不使用-k,那么问题就变成了如何让make在遇到你想要的错误时停止忽略。这(概念上)很简单:只需确保这些命令不会失败即可。您可以通过附加 || 来做到这一点: 到命令末尾,这样如果主命令失败,: 命令(不执行任何操作且始终成功)将运行并提供总体退出状态:

foo.o: foo.c
    $(CC) -o $@ $(CPPFLAGS) $(CFLAGS) $< || :

请注意,此方法要求您在任何想要避免错误停止的地方提供自己的规则。 Make 的内置规则不会表现出相同的行为。

您甚至可以对其进行配置,我建议您这样做:

# Stop on error (unless -k is in effect):
# ON_ERROR =
#
# Do not stop on (most) errors: 
ON_ERROR = || :

foo.o: foo.c
    $(CC) -o $@ $(CPPFLAGS) $(CFLAGS) $< $(ON_ERROR)

bar.o: bar.c
    $(CC) -o $@ $(CPPFLAGS) $(CFLAGS) $< $(ON_ERROR)

baz.o: baz.c
    $(CC) -o $@ $(CPPFLAGS) $(CFLAGS) $< $(ON_ERROR)

这样您就可以在一个地方打开或关闭所有错误抑制。

关于python - 如何在外部脚本错误后强制 make 退出,但在编译错误后不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46831085/

相关文章:

python - 使用PIL,python过滤部分图像

Python 3 逻辑 not 将 True 返回为 True

对 C 中的内联声明的困惑

c - 尝试调用单独的函数时的未定义行为

无法转换为指针类型,转换结构

makefile - 如何在 makefile 中写入 'cd' 命令?

python - 获取具有任意嵌套度的 html 元素的内容(以及内容的 xpath)

python - 访问值 boto3 字典响应

qt - Makefile中缺少分隔符错误

c++ - g++: 错误: 无法识别的命令行选项 '-mt'