比較的少量のRAM(1 GB)のコンピューターにGentooをインストールしています。llvm
(emerge -a llvm
)をインストールすると、コンピューターのメモリが常に不足します。 。4つのcc1plus
プロセスはすべて、システムが使用できないときにRAMの約25%を使用しています。一度に1つのプロセスのみを使用すると役立つと思います。
1つのコンパイラプロセスだけでllvm
ビルド(cmake
とninja
を使用)を実行するにはどうすればよいですか?
make.conf
にタイプミスがありました:
#MAKEFAGS="-j3"
MAKEFAGS="-j1"
私は他の多くの変種を試していましたが、数日で書きます。 (コンパイルには数時間かかり、RAMが利用できない場合は、スワップを使用していても、電源を切断して再起動する必要があるためです。)
ninja
はmake
ではありませんが、そのebuildは、MAKEOPTS
環境変数で指定された-j
パラメーターを認識して尊重する必要があります。つまり、MAKEOPTS=-j1
を介して最大1つのジョブを強制できるはずです。これは1回限りで実行できます。
MAKEOPTS=-j1 emerge -a llvm
MAKEOPTS=
の/etc/portage/make.conf
行を編集することにより、システム上のすべてのパッケージに対してこの変更をグローバルに/永続的に設定することもできます。
ただし、シェルまたはMAKEOPTS=-j1
を介してmake.conf
を設定した場合、並列化設定はemerge
がインストールするすべてのパッケージに適用されます。その1つのパッケージだけに適用する場合は、/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»
に依存しているため、さまざまなeclassおよびebuildは、この変数の-j
パラメーターを使用中の実際のビルドシステムに相当するものにマップします。これは eclass/ninja-utils.eclass
(llvm
によって使用されるcmake-utils.eclass
によって使用されます)で確認できます。このスニペットは-j
パラメータのみを抽出し、それをninja
に渡します。これは、ninja
がそのパラメータをサポートしているのに対し、他の人がMAKEOPTS
に配置するものはサポートしていない可能性があるためです。
免責事項:私はこれを最新のllvm
ebuildで実際にテストしていません。この回答に問題がある場合はコメントしてください!