我有一个用C ++构建的(仍然)小型游戏引擎,用Visual Studio构建。游戏引擎支持DirectX和OpenGL,但这并不重要。重要的是我有一些抽象基类的特定实现(例如,DXKernel和OGLKernel作为Kernel类的子类)。因此,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 :(得分: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
...
现在所有的源都正确构建,我可以选择编译器应该链接哪个库(当然还有两个)。
感谢收看。