更新

更新

我在内存相对较少(1 GB)的计算机上安装了 Gentoo。当我安装llvmemerge -a llvm)时,计算机总是内存不足。cc1plus当系统无法使用时,所有 4 个进程都使用了大约 25 % 的内存。我认为一次只使用一个进程可能会有所帮助。

如何仅使用一个编译器进程运行llvm构建(使用cmake和)?ninja


更新

我必须在以下位置做出改变make.conf

#MAKEFLAGS="-j3"
MAKEFLAGS="-j1"

我尝试了很多其他的变体,但我将在几天内写出来。(因为编译需要几个小时,如果没有可用的 RAM,即使我使用交换,我也必须通过断开电源重新启动它。)

答案1

即使ninja不是make,其 ebuild 也应该识别并尊重环境变量-j中指定的任何参数MAKEOPTS。这意味着您应该能够通过 强制最多执行一项作业MAKEOPTS=-j1。您可以一次性执行此操作:

MAKEOPTS=-j1 emerge -a llvm

MAKEOPTS=您还可以通过编辑中的行,为系统上的所有软件包全局/永久地设置此更改/etc/portage/make.conf

但是,如果您MAKEOPTS=-j1通过 shell 或进行设置make.conf,则并行化设置将应用于所有emerge安装的包。如果您只想将其应用于一个包,您可以创建名为的文件/etc/portage/env/sys-devel/llvm(如果需要,创建任何缺少的目录)并将以下内容放入其中:

MAKEOPTS=-j1

这将仅将变量应用于 llvm 包本身。

如何在 shell 中执行此操作:

mkdir -p /etc/portage/env/sys-devel
echo MAKEOPTS=-j1>>/etc/portage/env/sys-devel/llvm

忍者和MAKEOPTS

在 Gentoo 中,由于人们依赖于MAKEOPTS=-j«n»控制作业数量,因此各种 eclasses 和 ebuilds 会将此变量的-j参数映射到实际使用的构建系统的等效参数。您可以在eclass/ninja-utils.eclass(由 所用 ,cmake-utils.eclass由 所用llvm)。该代码片段仅提取-j参数并将其传递给ninja因为ninja支持该参数,但它可能不支持人们放入 中的其他内容MAKEOPTS

免责声明:我还没有用最新的llvmebuild 测试过。如果这个答案有问题,请评论!

相关内容