3

< iostream > を含めることができ、その cpp ファイルは気にしませんが、独自のクラスに対して同じことをできないのはなぜでしょうか?

したがって、プロジェクトで 50 個のカスタム クラスを使用する場合、50 個のインクルードが必要になるだけでなく、50 個の cpp ファイルをコンパイル/リンクする必要があります (そしてプロジェクト ツリーが乱雑になります)。

Q: 標準ライブラリを使用するのと同じ方法でカスタム ヘッダーを使用する方法はありますか?

言い換えれば、プロジェクトにすべての cpp ファイルを追加する必要がないように、コーシャな方法はありますか。私はClassVector.cppを見つける方法を知っているClassVector.hppにリンクするClassSnake.cppを見つける場所を知っているClassSnake.hppのみを含めたい...これらのcppファイルを明示的に追加することなく、すべて自動デイジーチェーンで私のプロジェクトツリーで。

編集: cpp ファイルの再コンパイルについてはあまり心配していません。私の問題は、どのクラスが他のどのクラスに内部的にリンクしているかを覚えておく必要があるため、プロジェクトツリーにすべての非表示の cpp ファイルを適切に含めることができます...そしてツリーを乱雑にします。

ここに画像の説明を入力

4

6 に答える 6

0

まず、make などのシステムを使用すると、.cpp ファイルが変更されていないことが識別されるため、コンパイラはオブジェクト ファイルを再構築する必要がありません。

独自の静的/共有ライブラリを作成することもできます。これを行う方法は、プラットフォームによって異なります。この道を下る場合、必要なのはライブラリと一緒にヘッダーファイルだけです。

特定のプラットフォーム用のライブラリを作成する方法については、Google に問い合わせてください。

于 2013-05-15T18:53:41.613 に答える
0

ヘッダーは (通常) もの (関数、クラス) の実装を提供しません。それらを使用する場合は、どこかに実装する必要があります。

独自のヘッダーを含める場合は、実装を提供するために独自のソースを含めます。十分にまっすぐ進んでください。

標準ヘッダー (iostream など) を含める場合、実装は含めるライブラリ内にあります (コンパイラが行うため暗黙的に、またはコンパイラ/リンカー オプションを介して明示的に)。

于 2013-05-15T18:47:08.140 に答える
0

Collin の回答の拡張として、いつでも「共有」コードを共有ライブラリにオフロードしてから、他のプロジェクトのヘッダー ファイルと lib ファイルを参照できます。lib ファイルは、他のすべての厄介な.cppファイルが既にコンパイルされているため、リンカー段階でのみ再生されます。

これが他の共通点のない単なる自己完結型のプロジェクトである場合は、実装を提供する必要があるという事実を吸収する必要があります:)

于 2013-05-15T18:48:55.813 に答える
0

実際、適切なビルド プロセスがあれば、変更されていない cpp ファイルは再度コンパイルされません。リンクするだけです。どちらも望まない場合は、独自のライブラリを作成する必要があります。それは可能ですが、もう少し複雑です。

編集:この質問は、独自のライブラリを作成する場合に役立ちます。

編集された質問への回答: はい、プロジェクトにこれらすべての cpp ファイルを含めることを避けることができますが、それらを変更したくない場合に限ります。この場合、静的ライブラリまたは動的ライブラリを作成するだけで、リンク用のシンボルのみが必要になります。その場合、別のプロジェクトを作成して、すべてをそのようなライブラリにコンパイルします。

于 2013-05-15T18:49:06.920 に答える
-1

「iostream」のような STL コードはテンプレートで構成されており、テンプレートのインスタンスが作成されるまで実際にコードは生成されません。

于 2013-05-15T18:47:34.513 に答える