gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:54:21 32 4
gpt4 key购买 nike

我有一个用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com