将多个实现提取到静态库中
Extract multiple implementations into static libraries
我有一个用Visual Studio构建的c++小游戏引擎。游戏引擎支持DirectX和OpenGL,但这并不重要。重要的是,我有一些抽象基类的特定实现(例如,DXKernel和OGLKernel作为Kernel类的子类)。因此,DXKernel和OGLKernel类有一个带有一些特定于平台代码的公共接口。内核类确实有一些自己的实现,所以它不是一个纯接口,这些方法应该由实现继承。
现在,根据我的理解,最好从主项目中取出特定的实现,并创建静态库来链接主项目,这取决于我正在编译的平台。如果我为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)?我应该将主项目的头文件复制到库中(这会在头文件更新时产生问题)?我应该更改库项目的包含路径吗?
这种设置似乎在主项目和库之间创建了某种循环依赖关系,据我所知,情况不应该是这样的。
我希望你能帮助我。
让我来回答我自己的问题。我对这个主题做了更多的研究,发现静态库要求使用的头文件在主项目中,而这些头文件的.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
...
所有的源代码现在都正确构建,我可以选择编译器应该链接哪个库(当然也可以两者都链接)。
感谢收看
相关文章:
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 如何从 std::atomic 中提取指针 T<T>?
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 为什么istream不支持右值提取
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 是否可以为给定的静态库人为地诱导对象文件提取
- 提取将来可能会改变的静态值
- 在派生类中使用提取运算符(>>)的方法以及在C++中处理静态数据成员的方法
- 将多个实现提取到静态库中