为什么我应该通过 make -j 参数?(而不是将其留空)

use*_*765 5 makefile compilation build

我已经看到很多关于当你运行时传递给 X 的好值的讨论

make -j X
Run Code Online (Sandbox Code Playgroud)

通常,人们认为 X 应该是系统内核数量的函数。在我的项目中,我通过省略 X 并简单地运行找到了最佳性能

make -j
Run Code Online (Sandbox Code Playgroud)

如果您不关心为其他进程保留资源而只想要最快的构建,是否有任何理由修复 X?

Mad*_*ist 5

对于您的项目而言-j,不带参数使用可能是最佳解决方案。如果您可以并行运行的作业数量相对较少,那就没问题了。

然而,资源不是无限的。-j单独使用告诉 make 它应该运行所有可能构建的作业,而不考虑系统资源。它不看你有多少 CPU、你有多少内存、你的系统负载有多高或其他任何东西。

因此,如果您有一个非递归的构建系统,和/或包含可以并行构建的成百上千个文件(不相互依赖),make 将尝试同时运行它们。就像当你试图在你的系统中同时做太多事情时,它会减慢速度,最终比一次做几件事花费的时间更长,所以运行过多的工作会让你的系统瘫痪。

-j例如,尝试使用 构建 Linux 内核,看看它对您有何作用:-)。