1

ソースからのビルドに時間がかかりすぎる大規模な (~1 mloc) C++ アプリケーションに取り組んでいます (Visual Studio を使用する Windows、Makefile または XCode を使用する Mac)。最適化を開始する場所を知りたいです (プリコンパイル済みヘッダー、前方宣言など)。

アプリケーション自体のパフォーマンスと同様に、最適化を開始する前にビルド プロセスをプロファイリングしたいと思います。

これをサポートするために利用できるツールは何ですか?

4

2 に答える 2

2

まず、使用している Visual Studio のバージョンを正確にお知らせください。可能な場合は、VS2010 にアップグレードしてください。これは、並列ビルドのサポートがはるかに優れているためです。考慮すべき点がいくつかあります。

  • ソース ツリーをシステム ディスクとは別のディスクに配置します。2 つの SSD (システム用に 1 つ、ソース用に 1 つ) に拡張できる場合、これは大きな違いになります。
  • 並列ビルドを有効にします。VS2010 では、これにより、プロジェクトとほぼ同じサイズのプロジェクトのビルド時間が半分になりました。「マルチプロセッサ コンパイル」スイッチ (/MP) を有効にします。プロジェクトの 1 つまたは 2 つに奇妙な依存関係がある場合、これをオフにする必要がある場合がありますが、ほとんどのプロジェクトでオンになっている限り、大幅なブーストが得られます。
  • VS2010 には詳細なビルド タイミング ログ オプションがあり、さまざまなプロジェクトで費やされた時間を分離するのに役立ちます。VS2005/2008 にはビルド タイミング オプションがあります
  • VS2005 または VS2008 を使用している場合は、 MPCLプラグイン (無料ではありませんが非常に安価です) を試してみてください。これは、VS 自体よりも優れた並列ビルドを行います。予算があれば、Incredibuild のようなツールがあります
  • Makefile を使用している場合は、-jフラグを使用して並列化します。Xcode を使用している場合、他の Mac が利用可能であれば、分散ビルドを使用できます (ただし、私自身はこれで運が良かったことはありません)。
  • gccでccacheを使用することを検討できます
  • すべてまたはほとんどのプロジェクトでプリコンパイル済みヘッダーを有効にします。どれだけの利益が得られるかを知るには、少し実験が必要かもしれません -- 投入すればするほど、収穫逓減にすぐに到達します (投入すればするほど、より多くの再構築が必要になります)。
  • 大規模な C++ 設計に関する John Lakos の本を読んでください。これは、大規模なプロジェクトを分割して依存関係を分離する方法に関する素晴らしいアドバイスの源です。
  • 2 段階のビルド プロセスを考えてみましょう。ビルドする必要があるサードパーティ ライブラリが多数ある場合、またはそれほど頻繁に変更されない他のライブラリがある場合は、それらのために別のプロジェクトを設定します。メイン プロジェクトと並行してビルドするか、バイナリを保存してみてください。バイナリをソース管理システムにチェックインすることを検討してください (はい、バイナリを SCM にチェックインすることは一般的に悪いことだと考えられていますが、実用的でなければならないと思います)
于 2012-07-27T10:22:08.670 に答える
1

ビルド時間を改善する方法はたくさんあります。そのうちの 1 つはもちろん、より多くのハードウェアです。つまり、より高速なディスクとより多くの RAM です。もう 1 つは、プリコンパイル済みヘッダーなどのコンパイラの機能です。distccccacheなど、役立つ外部ツールもあります。-jGNU make の場合、複数の make プロセスを並行して実行するオプションもあります。

于 2012-07-27T10:14:07.550 に答える