0

マルチ プロセッサ マシン上の Linux で巨大なプロジェクトのコンパイルを促進/最適化して、すべてのプロセッサを使用してコンパイルが並行して行われるようにする方法。

特別なフラグ、微調整に関する提案は役に立ちます。

よろしく、-J

4

5 に答える 5

2

数百万行の C++ とそれに投入する数千の CPU など、本当に巨大なプロジェクトがある場合は、Google がそのビルドの問題をどのように解決しているかを調べてみてください。

于 2012-05-16T05:35:51.790 に答える
1

依存関係ルールをセットアップし、コンパイラーにそれらを発行するように指示する必要があります (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 を並列に実行すると問題が発生することがあります。

于 2012-05-16T06:27:49.273 に答える
1
make -j <NUM_CPUS>

( を参照してくださいmake(1)。)

于 2012-05-15T21:34:15.500 に答える
1

使用するビルド システムによって異なります。GNU の場合makeは、単に追加-j(または--jobs) するだけでビルドが並列化されます。メイクファイルがどれだけ適切に動作するかに応じて、巨大なプロジェクトで動作する場合と動作しない場合があります。

マニュアルも参照してください。

于 2012-05-15T21:39:22.010 に答える
0

distccツールを使用して、事前定義されたマシンプールからさまざまなLinuxマシンでさまざまなソースファイルのコンパイルを実行できます。明らかに、makeコマンドラインの「-j」を使用する必要があります。さらに、再帰的なMakefileを避けるようにする必要があります。つまり、Makefileから再帰的に「make-C $ sub_dir」を呼び出すと、巨大なプロジェクトでのmakeプロセスが遅くなります。

于 2012-05-24T17:09:09.217 に答える