gpt4 book ai didi

c++ - 将多个实现提取到静态库中

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:43 25 4
gpt4 key购买 nike

我有一个(仍然)用 Visual Studio 构建的 C++ 小型游戏引擎。游戏引擎支持 DirectX 和 OpenGL,但这并不重要。重要的部分是我有一些抽象基类的特定实现(例如,DXKernel 和 OGLKernel 作为 Kernel 类的子类)。因此,DXKernel 和 OGLKernel 类有一个通用接口(interface),带有一些特定于平台的代码。 Kernel 类本身确实有一些实现,因此它不是一个纯接口(interface),这些方法应该由实现继承。

现在,据我了解,最好从主项目中取出具体实现,并创建静态库以链接主项目,具体取决于我正在编译的平台。所以,如果我正在为 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 中创建一个新的静态库项目,并将特定文件复制到新库中,我如何才能让库项目找到公共(public)头文件(例如 Kernel.h)?我是否应该将主项目的头文件复制到库中(这会在更新头文件时产生问题)?我应该更改库项目的包含路径吗?

虽然这种设置似乎在主项目和库之间创建了某种循环依赖关系,但据我所知,情况并非如此。

希望你能帮帮我。

最佳答案

让我回答我自己的问题。我对该主题进行了更多研究,发现静态库要求使用的 header 位于主项目中,而这些 header 的 .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
...

所有源代码现在都可以正确构建,我可以选择编译器应该链接哪个库(当然也可以选择两者)。

感谢收看。

关于c++ - 将多个实现提取到静态库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com