9

いくつかのプロジェクトで使用されているフレームワークがあります (フレームワークがどのように機能するかを示すいくつかのサンプルが含まれています)。フレームワークには、コア、グラフィック、物理、GUI などのコンポーネントがあります。それぞれが個別のライブラリです。構成もいくつかあります。

メイン ソリューション ファイルは、プロジェクトがライブラリを使用できるように、可能なすべての構成で完全なプロジェクトをコンパイルします。フレームワークは、特にフレームワークを利用するプロジェクトに取り組んでいる誰か (私を含む) によって再コンパイルされることはめったにないため、多くのヘッダーをプリコンパイルすることは理にかなっています。

最初は、各プロジェクト/サンプルに、プロジェクト全体で使用される独自のプリコンパイル済みヘッダーを用意しました。毎回同じ pch (たとえば、デバッグ) を再構築する必要があるため、共有 PCH によって冗長な PCH コンパイルが削減されると判断しました。ここまでは順調ですね。ライブラリと一緒に PCH をコンパイルするプロジェクトがあります。以降のすべてのプロジェクト/サンプルは現在、同じ PCH を使用しています。これは素晴らしく機能しました。

唯一の問題は、ファイル サイズが大きくなったことです。フレームワークを使用するプロジェクトがリリースされることを意図しているかのように、これは障害ではありません。共有 PCH から切り離され、独自のプロジェクトが作成される可能性があります。私は迅速な開発のためにこれを行いました (ビルドの準備ができている新しいプロジェクト/サンプルの VS プロジェクト ファイルとソース ファイルを作成し、古いプロジェクトを使用していた以前のプロジェクトのアップグレードを容易にするツールを実際に作成しました)。フレームワークのバージョン)。

とにかく、ファイル サイズの増加は、共有 PCH を作成している独立した VS プロジェクト ファイルに、すべてのライブラリのすべてのヘッダーが含まれているためです。私の質問は、条件付きコンパイル (#ifndef) を使用して最終的な実行可能ファイルのサイズを縮小できるかどうかです。または、複数の PCH ファイルを何らかの方法で共有することもできます (私の知る限り、それは不可能ですが、間違っている可能性があります)。私の PCH ファイルに関する知識は非常に限られているため、意味が分からない場合は、そう言ってください (優しい言葉で:))。 .

ありがとう!

注: 繰り返して明確にするために、これまでのところ、共有 PCH を含むすべてのライブラリをコンパイルする 1 つのソリューション ファイルがあります。すべてのサンプルとプロジェクトを再コンパイルすると、せいぜい数秒かそれ以上でコンパイルされます。以前は、各プロジェクトで PCH ファイルが再作成されていました。また、最初はライブラリごとに PCH が必要でしたが、ソース ファイルで複数の PCH ファイルを使用できないことがわかったため、このオプションは実行できませんでした。もう 1 つのオプションは、PCH ファイルのすべての可能な組み合わせをコンパイルすることですが、これは時間がかかり、面倒で、エラーが発生しやすくなります。

4

2 に答える 2

1

サイズの問題は、実際には必要のないヘッダーを使用することから来ているように思えますが、ターンアラウンドが速いため、開発時にこれらのヘッダーを使用することは理にかなっています。

#ifndefsの使用について:プリコンパイルは粗雑です。違いがある時点でプリコンパイル作業を共有できなくなります。#ifndefs を使用して、含めるもののさまざまなバリアントを作成する場合、つまり、

#ifndef FOO

次に、プリコンパイル済みヘッダーは、そのプリコンパイル済みヘッダーを使用する 2 つのファイルで FOO の定義が異なるポイントの前で停止する必要があります。したがって、#ifndef では問題は解決しません。最終的な結果として、FOO は同じである必要があります。そうしないと、プロジェクトごとに別の pch ファイルに戻ってしまいます。どちらも物事を解決しません。

複数の .pch ファイルの共有について: .pch ファイルの基本的な制限は、各 .obj が 1 つしか使用できないことです。もちろん、.pch ファイルにはヘッダーの任意の組み合わせを含めることができます。core+graphics 用の .pch、core+physics 用の .pch、core+ai などを使用できます。これは、どのソース ファイルも一度に core+1 モジュール以上と「対話」する必要がなければ、うまく機能します。時間。それは私には現実的に聞こえません。そのようなスキームとその変種は、多くの再構築作業のように聞こえますが、実際の利益はありません。無数の組み合わせを構築し、それらすべてを追跡する必要はありません。可能ですが、時間の節約にはなりません。

私の見解では、開発/デバッグ中の迅速なターンアラウンドのために実行可能ファイルのサイズを犠牲にし、実際のリリースのためにビルドするためのより遅いが無駄のない方法を使用することで、あなたはまさに正しいことをしています。

于 2010-12-07T13:20:18.873 に答える
0

過去に、プリコンパイル済みヘッダーに追加すると、すぐに収益が減少することがわかりました。そのため、より多くのプロジェクトでより便利にするために、より多くのヘッダーを追加しようとすると、減速する点。私たちのプロジェクトでは、PCH ファイルはほとんどのソース ファイルよりもコンパイルに時間がかかりますが、最大でも数秒しかかかりません。使用している各プロジェクトに固有の PCH ファイルを作成することをお勧めします。ソースファイルは単一のPCHファイルしか参照できないと言っているのは正しいですが、これを回避する1つの方法は、「強制的に含める」オプション(私が思うに[詳細設定]タブ)を使用して、すべてのファイルにPCHが含まれるようにすることですそのプロジェクトのファイル。

于 2010-11-08T23:21:11.767 に答える