4

VS2005でビルドされたかなり大きなC++プロジェクトがあり、コンパイルとゼロからのビルドに最大40分かかります。また、ソフトウェアが32ビットと64ビットの両方の構成でビルドされているため、インストーラーにはさらに10分かかります。継続的インテグレーションを使用する場合は、ビルドのフィードバックを迅速に取得することが重要だと感じているため、この時間を少なくとも10分程度に短縮したいと思います。

最終的にリンクされたファイルを削除してインクリメンタルビルドを使用するが、.objファイルは削除しない場合、ビルドプロセスははるかに高速になりますが、.dllを読み込めないなどのエラーがあちこちで発生するようです。クリーンなビルドから、すべてが正常に機能します。選択したCIシステムとしてTeamCityを使用しています。

たぶん、インクリメンタルビルドの動作はVisual Studioの新しいバージョンでより良く、アップグレードする良い動機になるかもしれませんか?誰かが同様の問題に遭遇しましたか?

4

4 に答える 4

2

私は実際にあなたの質問に答えることはできませんが、ビルドの高速化を探しているので、VisualStudio2010とSSDを使用した高速ビルドに関するこのブログ投稿が役立つ場合があります。http://qualapps.blogspot.com/2010/09/lightning-fast-builds-with-visual.html

于 2011-03-11T07:43:54.200 に答える
1

私の経験では、特にデバッグビルドの場合、ボトルネックはディスクIOです。これは、出力ファイルと中間ファイルのディレクトリを圧縮するのに役立ちます。また、インクリメンタルリンク機能を使用しない場合(インクリメンタルリンクを有効にする-いいえ)、一部のビルドが高速になることも確認しました。考慮すべきもう1つの設定は、ブラウズ情報の生成をオフにすることです(ブラウズ情報を有効にする-なし)。また、VS 2005の並列コンパイル機能を使用することを忘れないでください。ボトルネックとなるのはIOであることが多いため、CPUよりも多くのビルドスレッドを使用すると便利です。

于 2011-03-11T08:40:05.617 に答える
1

私自身はその振る舞いに気づいたことはありませんが、私は最初にリンク時コード生成を疑っています。継続的インテグレーションの場合は、それをスキップできます。

IncrediBuildについても言及する必要があります。問題にハードウェア、特にすでに持っているハードウェアを投げることは、すぐに成功します。

于 2011-03-11T08:45:27.497 に答える
1

良い質問。

Microsoft Visual Studio2003/2005/2008用の大規模なC++プロジェクト用のCIシステムをまとめていたとき、インクリメンタルビルドでも問題が発生しました。特に、プリコンパイル済みヘッダーを使用する場合、インクリメンタルビルドを実行することはすべての状況で機能するとは限らないようです。誰かがこれについて詳細な説明を持っているかどうか、つまり何が機能し、何が機能しないかを聞いてみたいと思います。

私の場合、プロジェクトを最初からビルドするのに1時間以上かかったので、日中のフィードバックをある程度速くするために、リリースビルドであるクリーンなナイトリービルドを実行し、日中はに基づいたインクリメンタルビルドを使用しました。毎晩。インクリメンタルビルディングが変更を正しく取得して必要なものをすべて再コンパイルできなかった場合を除いて、これはかなりうまく機能しました。このアプローチを試したのは、フィードバックを迅速に取得することが非常に重要であり、インクリメンタルビルドが月に1回以下失敗した場合、私は妥協して生きる準備ができていたからです。

一般的に、私は上記よりも優れたものが好きなので、より多くのハードウェアを入手して、並行してビルドするコンポーネントを再編成できる他のプロジェクトでは、通常、完全な再ビルドを行います。ビルドを並行して実行できる場合は、ビルドを大幅に高速化できます。

考慮すべき他の事柄は次のとおりです。

  • インクルードと前方宣言
  • テンプレートの使用法
  • 物事間の一般的な依存関係
  • プロジェクトの一部を独立したライブラリとして取り出します。これは事前に構築することもできます。

ビルドを高速化するためにできることはたくさんありますが、ほとんどの場合、これらをインクリメンタルビルドと見なします。

于 2011-03-11T09:24:35.557 に答える