gpt4 book ai didi

c - 为什么(makefile)构建可以串行工作而不是并行工作,并且模式匹配会导致这样的问题吗?

转载 作者:行者123 更新时间:2023-11-30 16:59:18 27 4
gpt4 key购买 nike

本质上,我有一个非常大的项目,通常需要花费大量时间来构建。因此,最好使用 -j 选项并将其划分为一堆作业,从而加快进程。但似乎当我这样做时,构建会在看似随机的时间崩溃。如果我继续努力,最终构建将会成功。我对 Makefile 不太有经验(我以前使用过它们,但没有像这样大的),所以我不知道为什么它会失败。

我唯一能想到的为什么会发生这种情况是 makefile 几乎完全是根据基于模式的规则制作的。 (如果我没有正确使用术语,我的意思是看起来像这样的规则......)

<小时/>

$(OUTDIR)/%.o: $(EXAMPLEDIR)/%.c

...

...

<小时/>

那么这会导致 -j 选项出现问题吗?我走在正确的轨道上还是完全错了(如果是的话,什么会导致这些类型的问题)?

提前感谢您阅读本文

最佳答案

需要明确的是,make 不是多线程的。它是单线程的,它只是同时调用多个程序以获得并行作业支持。

简短的回答是,不,模式规则本身不会对并行构 build 成问题。

如果您的构建串行工作,但并行运行时失败,并且特别如果您一遍又一遍地运行它,那么它可以工作,那么唯一的原因是您的 makefile 是错误的:是一个或多个目标之间的依赖关系,您尚未在 makefile 中编码,因此 make 不知道它们,正如 @Andrew 所说。

修复它的方法是查看哪个文件编译失败,并查看失败的原因(缺少哪个文件导致编译失败),然后确保该文件被列为需要的目标的先决条件它。清洗、漂洗,然后重复。

关于c - 为什么(makefile)构建可以串行工作而不是并行工作,并且模式匹配会导致这样的问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223912/

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