Makefile Windows gnu make with-j选项的行为很奇怪,不带数字,但不挂数字

Makefile Windows gnu make with-j选项的行为很奇怪,不带数字,但不挂数字,makefile,gnu-make,Makefile,Gnu Make,我正在使用gnu make构建一个包含许多子make文件的顶层,当我使用no-j进行make时,它会连续构建,我可以看到。。当我使用make-j6构建时,它也会连续构建(不会更快)。但是如果我单独使用make-j,它会在子目标(并行构建所有文件)中飞行,直到它碰到一个包含大量文件的子目标。。在这期间的某个时刻,它将永远挂起。。我真的不想弄明白为什么它永远挂着,因为我真的想要-j 6,我的理论是,如果我不做无限多的工作,就不会有挂着的问题 我的问题是,是否有一些技巧可以让-J6工作?我正在使用sh

我正在使用gnu make构建一个包含许多子make文件的顶层,当我使用no-j进行make时,它会连续构建,我可以看到。。当我使用make-j6构建时,它也会连续构建(不会更快)。但是如果我单独使用make-j,它会在子目标(并行构建所有文件)中飞行,直到它碰到一个包含大量文件的子目标。。在这期间的某个时刻,它将永远挂起。。我真的不想弄明白为什么它永远挂着,因为我真的想要-j 6,我的理论是,如果我不做无限多的工作,就不会有挂着的问题

我的问题是,是否有一些技巧可以让-J6工作?我正在使用sh.exe和gnu make.exe-h显示版本3.80。我读到-j在windows中不起作用,但我认为它曾经不起作用,但现在起作用了(加上我看到无限多的工作在飞,所以它在做一些事情)

任何帮助都将不胜感激


谢谢

在GNU make you have的版本中,在Windows上,不带参数的
-j
选项将导致无限多的潜在并行作业运行。但是带有参数的
-j N
选项的行为与no
-j
完全相同(串行)。换句话说,你所看到的行为完全符合预期。。。在窗户上

困难的部分不是如何并行运行作业。困难的部分是跟踪在递归调用
make
时运行的并行作业的数量。在Linux、MacOS和其他类似POSIX的系统上,GNU的不同实例相互通信,以确保在所有递归实例上运行的作业不超过N个。在您正在使用的GNU make版本中不支持的Windows上


但是,最新版本的GNU make版本4.0中添加了对Windows此功能的支持。不幸的是,在测试中没有发现其他一些问题(GNU make可能真的会使用更多基于Windows的测试程序,因此如果您有能力,我建议您订阅该bug)-make@gnu.org和/或制造-w32@gnu.org发布候选版本可用时通知的邮件列表)。GNU make 4.0有很多很好的版本,这些版本都应用了补丁,可以在Windows上运行。或者,您可以等待下一个版本来解决这些问题(希望不会创建新的问题)。

“-j[jobs],…如果在没有参数的情况下给出-j选项,make将不会限制可以同时运行的作业数。”--GNU make man pageYes,我读过这篇文章,我明白这很可能与它挂起太多文件/作业的原因有关。。不过,我的问题是,当我给出一个像-J6这样的数字时,它只做一个工作,它要么做一个工作,要么做无限个工作,两者之间什么都不起作用,……非常感谢,你已经解释过了!我将搜索gnu make 4.0,我将尝试它。如果这回答了您的问题,请将其标记为已回答(通过单击答案旁边的复选标记),以便其他人知道它已回答。好的,我构建了make 4.0,它正是我想要的。。对我来说似乎很好。。