1

У меня установлен Gentoo на компьютере с относительно небольшим объемом оперативной памяти (1 ГБ). Когда я устанавливаю llvm (emerge -a llvm), компьютеру всегда не хватает памяти. Все 4 процесса cc1plus используют около 25% оперативной памяти, когда система не работает. Я думаю, что использование только одного процесса за раз может помочь.

Как я могу запустить сборку llvm (использует cmake и ninja) только с одним процессом компиляции?


Обновить

У меня была опечатка в make.conf:

#MAKEFAGS="-j3"
MAKEFAGS="-j1"

Я пробовал много других вариантов, но напишу через несколько дней. (Поскольку компиляция занимает несколько часов, и если нет доступной оперативной памяти, я должен перезагрузить ее, отключив питание, даже если я использую swap.)

1 ответ1

0

Даже несмотря на то, что ninja не make , его ebuild должен распознавать и учитывать любой параметр -j указанный в переменной среды MAKEOPTS . Это означает, что вы должны быть в состоянии форсировать максимум одну работу через MAKEOPTS=-j1 . Вы можете сделать это на разовой основе:

MAKEOPTS=-j1 emerge -a llvm

Вы также можете установить это изменение глобально / постоянно для всех пакетов в вашей системе, отредактировав MAKEOPTS= в /etc/portage/make.conf .

Однако, если вы установите MAKEOPTS=-j1 через вашу оболочку или make.conf , параметры распараллеливания будут применены ко всем пакетам, которые emerge установке. Если вы хотите применить его только к одному этому пакету, вы можете создать файл с именем /etc/portage/env/sys-devel/llvm (при необходимости создайте отсутствующие каталоги) и поместить в него следующее содержимое:

MAKEOPTS=-j1

Это будет применять переменную только к самому пакету llvm.

Как это сделать в оболочке:

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

Ниндзя и MAKEOPTS

В Gentoo, поскольку люди полагаются на MAKEOPTS=-j«n» чтобы контролировать количество заданий, различные eclasses и ebuild-файлы будут сопоставлять параметр -j этой переменной с эквивалентом для используемой системы сборки. Вы можете увидеть это в eclass/ninja-utils.eclass (который используется cmake-utils.eclass который используется llvm). Этот фрагмент извлекает только параметр -j и передает его ninja потому что ninja поддерживает этот параметр, хотя он может не поддерживать другие вещи, которые люди помещают в MAKEOPTS .

Отказ от ответственности: я на самом деле не проверял это с последним llvm . Пожалуйста, прокомментируйте, если есть проблемы с этим ответом!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .