メモリ不足で QtWebEngine のビルドが失敗する際の対策

QtWebEngine をビルドすると、メモリ不足でビルドができないことがたまによくあります。

これは、QtWebEngine の src/core/ 以下がビルドシステムとして qmake ではなく、ninja を利用しているためで、デフォルトで CPU のコア数に応じた並列化が自動で行われるためです。

Builds are always run in parallel, based by default on the number of CPUs your system has. Underspecified build dependencies will result in incorrect builds.

The Ninja build system – Compare to Make

ただでさえここのコンパイルはとてもメモリを消費するのですが、並列度が増すことでそれがクリティカルになってビルドが失敗してしまいます。

というわけで、こういった現象でお困りの際は、手動で並列数を下げてビルドを行いましょう。

(スワップ領域を数GB用意するという荒技を提案されることもありますが、スマートな方法とは思えません。)

runninja.commands = $$NINJA $$ninjaflags \$(NINJAJOBS) -C $$gn_build_root QtWebEngineCore

tree/src/core/gn_run.pro#54

ninja を呼び出す処理は上記のように定義されているため、環境変数 NINJAJOBS に -j4 などと指定することで並列度をコントロールすることが可能です。

とりあえず、普通に(並列度最大で)ビルドをし、メモリがボトルネックになっているところでは NINJAJOBS を指定してビルドをし、ボトルネックをやり過ごしたら、再度普通にビルドすると上手にビルドが完了するはずです。