1

非常に特定のタスクを処理するように設計された一連の小さなライブラリ「モジュール」があります。単一のモジュールは、通常、.hとだけで構成され.cpp、場合によっては、ユーザーが役立つと思われる関連する非フレンド、非メンバー関数を提供する別のセットで構成されます。

たとえば、 を定義 Foo.hする というクラスを宣言し、によって定義されるを使用する関数を宣言する場合があります。FooFoo.cppFooUtilities.hFooFooUtilities.cpp

通常、これらのモジュールを自分のプログラムで使用するには、.h.cppをプロジェクトに追加し#include.h必要なファイルに を追加します。ただし、相互依存する可能性のあるモジュールを使用する大規模なプログラムの場合、これは大きな不便になります。.hしたがって、すべてを単一のモノリシックな静的ライブラリまたは動的ライブラリとしてコンパイルして、ライブラリ ファイルをプロジェクトに追加し、ヘッダー検索ディレクトリを前述のファイルを含むフォルダーに設定してコンパイルできるようにしたいと考えています。

かなり単純に見えますよね?私がしなければならないのは、ビルド ターゲットとして静的/動的ライブラリを使用して新しいプロジェクトを開始し、適切なファイルをすべて追加することだけです。とにかくファイルがコンパイルされ、最終製品に追加さ.cpp#includeます。.h

ただし、一部のモジュールはテンプレートを使用するため、.tpp代わりに.cpp. ファイルは.tpp編成のみを目的としており#include、通常のモジュールの処理方法とは逆の、それぞれのヘッダー ファイルによって定義されます。このため、それらをライブラリ プロジェクトに追加するだけでは何もコンパイルされません。

どうすればこれを回避できますか? CompileThis.cppテンプレートを使用するすべてのモジュールを含むファイルが必要ですか? もしそうなら、このファイルにはテンプレート以外のモジュールも含めるべきですか? これは急速に組織の混乱に発展する可能性があるようです。

4

2 に答える 2

3

多くのコンパイラは、テンプレートをライブラリに「プリコンパイル」できません。私の最善の提案は、それらをヘッダー ファイルのように扱うことです。ヘッダー ファイルはライブラリにコンパイルされず、インクルードされるだけです。

変更の量が最小限の場合は、コードをライブラリにコンパイルします。これらのファイルを再コンパイルする必要がないため、これによりビルドプロセスが高速化されることがよくあります (そして、再度...)。

于 2011-04-29T17:08:18.633 に答える