我正在使用gnu make来构建一个包含许多子makefile的顶级,当我根本没有使用-j时,它会串行构建,我可以看到..当我使用make -j 6构建时它也是连续构建(不会更快)。但是,如果我自己使用make -j,它会飞过子目标(并行构建所有文件),直到它遇到一个包含大量文件的子目标..在此期间的某个时刻,它会永远挂起..我真的不想尝试弄明白为什么它会永远挂起因为我真的想要-j 6并且理论上如果我没有做无限的工作就没有任何悬念......
我的问题是,是否有一些技巧让-j 6工作?我正在使用sh.exe和gnu make.exe -h显示版本3.80。我读-j在Windows中不起作用,但我认为它一次也没有,但它确实现在(加上我看到无限的工作飞行所以它做了一些事情)..
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
在GNU make版本中,在Windows上,-j
选项没有参数将导致无限数量的潜在并行作业运行。但是带有参数的-j N
选项的行为与完全没有-j
的行为相同(串行)。换句话说,您所看到的行为完全符合预期......在Windows上。
困难的部分是不如何并行运行作业。困难的部分是跟踪make
的递归调用中正在运行的并行作业数。在Linux,MacOS和其他类似POSIX的系统上,不同的GNU实例相互通信,以确保在所有递归实例中运行的作业不超过N个。在Windows上,您正在使用的GNU版本中不存在支持。
但是,在最新版本的GNU make 4.0版中添加了对Windows的此功能的支持。不幸的是,在测试中没有发现其他一些问题(GNU make真的可以使用更多基于Windows的测试人员,所以如果你有能力,我建议你订阅bug-make@gnu.org和/或者发送候选人时可以通知make-w32@gnu.org邮件列表。有很好的GNU make 4.0版本,它们都有应用补丁以使它们在Windows上运行。或者您可以等待下一个版本来解决这些问题(并且希望不会创建新问题)。