質問: gentoo-llvmの並列ビルドを無効にします 比較的少量の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 忍者とmakeoptsgentooでは、人々はジョブの数を制御するためにmakeopts=-j«n»に依存しているため、さまざまなeclassおよびebuildは、この変数の-jパラメーターを使用中の実際のビルドシステムに相当するものにマップします。これは eclass/ninja-utils.eclass (llvmによって使用されるcmake-utils.eclassによって使用されます)で確認できます。このスニペットは-jパラメータのみを抽出し、それをninjaに渡します。これは、ninjaがそのパラメータをサポートしているのに対し、他の人がmakeoptsに配置するものはサポートしていない可能性があるためです。免責事項:私はこれを最新のllvmebuildで実際にテストしていません。この回答に問題がある場合はコメントしてください!