2011-12-19 5 views
2

私はVisual Studioで構築されたC++の(まだ)小型のゲームエンジンを持っています。ゲームエンジンはDirectXとOpenGLをサポートしていますが、これは重要ではありません。重要な部分は、抽象基底クラス(例えば、KernelクラスのサブクラスとしてDXKernelとOGLKernel)を実装していることです。したがって、DXKernelクラスとOGLKernelクラスには、プラットフォーム固有のコードと共通のインタフェースがあります。 Kernelクラスには独自の実装がいくつかあるため、純粋なインターフェイスではなく、これらのメソッドは実装によって継承される必要があります。複数の実装を静的ライブラリに展開する

私が理解しているように、メインプロジェクトから特定の実装を取り除き、コンパイルしようとしているプラ​​ットフォームに応じて、メインプロジェクトをリンクする静的ライブラリを作成することをお勧めします。だから、もし私がOS X用にコンパイルしているのであれば、OpenGLの実装だけを含めることができます。 Windows用にコンパイルしている場合は、DirectXとOpenGLの両方の実装を取り入れる必要があります。

Visual Studioのレイアウトは次のようになります。

Solution 
    Project 
     Header files 
      Core 
       DX 
        DXKernel.h <-- DirectX implementation of abstract methods 
        ... 
       OGL 
        OGLKernel.h <-- OpenGL implementation of abstract methods 
        ... 

       Kernel.h   <-- abstract class(es) 
       ... 
      ... 
     Source files 
      Core 
       DX 
        DXKernel.cpp 
        ... 
       OGL 
        OGLKernel.cpp 
        ... 

       Kernel.cpp 
       ... 
      ... 

私は、Visual Studioで新しい静的ライブラリプロジェクトを作成し、新しいライブラリに特定のファイルをコピーした場合、どのように私は、ライブラリプロジェクトを取得することができます一般的なヘッダ(例えばKernel.hなど)を見つけるには?メインプロジェクトのヘッダーファイルをライブラリにコピーする必要があります(ヘッダーが更新されると問題が発生します)。ライブラリプロジェクトのインクルードパスを変更する必要がありますか?

この設定では、メインプロジェクトとライブラリの間に何らかの循環依存関係が作成されているようですが、これは私が知る限りではありません。

私があなたを助けてくれることを願っています。

+0

greate質問です。 – beratuslu

答えて

1

私自身の質問に答えさせてください。トピックに関するいくつかの調査を行い、静的ライブラリでは、使用されているヘッダーがメインプロジェクトにあり、これらのヘッダーの.cpp実装は静的ライブラリにあることが必要であることがわかりました。

ので、プロジェクトのソースは次のようになります。

Solution 
    Main Project 
     Header files 
      Core 
       DX 
        DXKernel.h <-- DirectX header 
        ... 
       OGL 
        OGLKernel.h <-- OpenGL header 
        ... 

       Kernel.h   <-- abstract class 
       ... 
      ... 
     Source files 
      Core 
       Kernel.cpp 
       ... 
      ... 

    Static library project (DirectX) 
     Source files 
      Core 
       DXKernel.cpp  <-- DirectX implementation 
       ... 

    Static library project (OpenGL) 
     Source files 
      Core 
       OGLKernel.cpp <-- OpenGL implementation 
       ... 

すべてのソースは、正しく構築し、私は、コンパイラがして(またはコースの両方)リンクする際のライブラリを選択することができます。

ご覧いただきありがとうございます。

関連する問題