2009-05-11 9 views
26

新しい会社を立ち上げて以来、われわれはソリューションの大部分に単一のcppファイルを使用していることに気付きました。なぜ、どのようにしてこれらのビルドプロセスがスピードアップするのかについて誰かが私に決定的な理由を与えることができるのだろうかと思いました?私は、1つのcppファイルをunityファイルで編集すると、それらすべての再コンパイルが強制されると思っていたでしょう。ここ統一のメリットとデメリットは?

+4

ユニティビルドはセマンティクスを変更することに注意してください。翻訳単位の限界に依存するものがたくさんあるためです。 –

答えて

26

非常に類似した質問と良い答え:#include all .cpp files into a single compilation unit?

概要は以下I/Oのオーバーヘッドが大きな利点であることのようです。

上記の質問にリンクされているThe Magic Of Unity Buildsも参照してください。 Unityはビルドで

+0

優れた答え、あなたの助けをありがとう、これらのリンクを読んだ後でも、私はまだ賢明ではありませんユニットcpp内のファイルを編集する場合は、全体のソースの完全な再コンパイル、 – Stowelly

+0

はい、そうです。それが悪いかどうかは、完全な再構築をどれくらいの頻度で行う必要があるかによって決まります。 –

+2

1つのファイルが変更された場合、適切なビルドシステムは変更された依存関係を認識し、ロットを再コンパイルします。優れたccacheのようなコンパイラキャッシュを使用して、その時間の一部を緩和することができます。http://ccache.samba.org/ – akent

6

リーワインダーは自分の体験を投稿 - The Evils of Unity Builds

彼の結論は次のとおりです。

Unityが構築します。私はそれらを好きではない。

+0

非常に便利な記事です。私は最近、ソリューション内の複数のプロジェクトにわたるファイルにいくつかの変更を加えても、(incredibuildを使用して)ビルドに最大30分かかりますが、ソリューションを一掃し、最初からビルドするのに約5分かかることに気付いています。そこにポイント! – Stowelly

+1

このリンクは[here](http://engineering-game-dev.com/2009/12/15/the-evils-of-unity-builds/)にあります。 – imallett

+0

@imallettリンクも壊れています。 – glauxosdever

2

これは冗長な作業を節約するためです。依存関係のための冗長な解析とコンパイル。リンクはもっと複雑です。エクスポートを1つのオブジェクト(またはいくつか)にまとめているか、ターゲットのオブジェクトファイルの大半に別々の冗長エクスポートがあります。オブジェクト数が少なくなればI/Oが少なくなり、リンク時間が短縮されます。設定に応じて、組み込みが問題になる可能性があります - 私が使用する "統一ビルド"システムでは、ビルドは最終的にCPUおよび/またはメモリにバインドされます。

関連する問題