マルチ プロセッサ マシン上の Linux で巨大なプロジェクトのコンパイルを促進/最適化して、すべてのプロセッサを使用してコンパイルが並行して行われるようにする方法。
特別なフラグ、微調整に関する提案は役に立ちます。
よろしく、-J
マルチ プロセッサ マシン上の Linux で巨大なプロジェクトのコンパイルを促進/最適化して、すべてのプロセッサを使用してコンパイルが並行して行われるようにする方法。
特別なフラグ、微調整に関する提案は役に立ちます。
よろしく、-J
数百万行の C++ とそれに投入する数千の CPU など、本当に巨大なプロジェクトがある場合は、Google がそのビルドの問題をどのように解決しているかを調べてみてください。
依存関係ルールをセットアップし、コンパイラーにそれらを発行するように指示する必要があります (gcc の場合は -MD -MP)。次に例を示します。
YOUR_DEP :=$(patsubst %.o,%.d,$(YOUR_OBJ))
-include $(YOUR_DEP)
...
%_c.o: %.c Makefile
@echo [GCC ] $<
@$(CC) $(CFLAGS) -MD -MP $< -o $@
%_cpp.o: %.cpp Makefile
@echo [CXX ] $<
@$(CXX) $(CXXFLAGS) -MD -MP $< -o $@
このようにして、make は依存関係のチェックを行うことができます。ただし、複数レベルの依存関係を持つ巨大なプロジェクトでは、make -j を並列に実行すると問題が発生することがあります。
make -j <NUM_CPUS>
( を参照してくださいmake(1)
。)
使用するビルド システムによって異なります。GNU の場合make
は、単に追加-j
(または--jobs
) するだけでビルドが並列化されます。メイクファイルがどれだけ適切に動作するかに応じて、巨大なプロジェクトで動作する場合と動作しない場合があります。
マニュアルも参照してください。
distccツールを使用して、事前定義されたマシンプールからさまざまなLinuxマシンでさまざまなソースファイルのコンパイルを実行できます。明らかに、makeコマンドラインの「-j」を使用する必要があります。さらに、再帰的なMakefileを避けるようにする必要があります。つまり、Makefileから再帰的に「make-C $ sub_dir」を呼び出すと、巨大なプロジェクトでのmakeプロセスが遅くなります。