#include すべての .cpp ファイルを単一のコンパイル単位にしますか?
質問
私は最近、いくつかの Visual Studio C++ プロジェクトで、通常の Debug と Release の構成に加えて、これまで見たことのない 'Release All' と 'Debug All' の構成で作業する必要がありました。
プロジェクトの作成者は、他のすべての .cpp ファイルを #include する単一の ALL.cpp を持っていることがわかりました。All 設定は、この 1 つの ALL.cpp ファイルを構築するだけです。もちろん、これは通常の構成からは除外され、通常の構成は ALL.cpp を構築しません。
私はただ、これが一般的なやり方なのかどうか疑問に思っていました。それはどのような利点をもたらすのでしょうか。(私の最初の反応は、悪いにおいがするということでした)。
これにはどのような落とし穴がありそうですか?私が思いつくのは、.cpps に匿名の名前空間がある場合、それらはもはやその cpp に対して「プライベート」ではなく、他の cpps でも見えるようになることですか?
すべてのプロジェクトは DLL をビルドするので、匿名の名前空間にデータを持つことは良いアイデアではありませんよね。しかし、関数はOKでしょうか?
どのように解決するのですか?
これは "Unity Build" と呼ばれています(ググれば出てきます)。非常に高速にリンクし、適度に速くコンパイルできます。これは、中央サーバーからのリリース ビルドのように、反復する必要のないビルドには最適ですが、必ずしもインクリメンタルなビルドには適していません。
そして、メンテナンスが大変です。
EDIT: 詳細は最初のグーグルリンクをどうぞ。 http://buffered.io/posts/the-magic-of-unity-builds/
高速になるのは、コンパイラがすべての .cpp ファイルに対してそれを行うのではなく、一度すべてを読み込んでコンパイルし、それからリンクする必要があるだけだからです。
Bruce Dawson は、彼のブログでこれに関してより良い記事を書いています。 http://randomascii.wordpress.com/2014/03/22/make-vc-compiles-fast-through-parallel-compilation/
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] なぜcppファイルをインクルードせず、ヘッダを使用する必要があるのですか?
-
[解決済み] フォルダ内のすべてのファイルを1つのバンドルに含める
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み】C++のコンパイルにはなぜそんなに時間がかかるのですか?