我应该用什么顺序构建我的C ++静态库

时间:2018-05-04 13:27:00

标签: c++ inheritance compilation msbuild lib

我有3个静态库graphics.lib,graphics_opengl.lib和graphics_d3d.lib

来自graphics.lib的

class DeviceInfo
{
   public:
    std::string name;
};

class GenericGraphicDevice
{
  public:
    // example function populating info_out with generic device information.
    virtual void GetDeviceinfo( DeviceInfo &info_out ); 

    //...
};
来自graphics_opengl.lib的

class OpenGLDeviceInfo : public DeviceInfo
{
   public:
    int gl_version;
};

class OpenGLGraphicDevice : public GenericGraphicDevice
{
  public:
    // example function populating info_out with gl specific device info and
    // probably calling the base function it overrides to pick up the generic data.
    virtual void GetDeviceInfo( DeviceInfo &info_out );

    //...
};

与graphics_d3d.lib相同的设置。

所以我在Visual Studio解决方案中打开了4个项目。游戏为1,每个库为1。

选项1)我在通用图形项目中引用d3d和opengl项目,因此我的构建顺序为:

d3d OR opengl
Then graphics

选项2)d3d和opengl引用通用图形,所以我的构建顺序是:

graphics
d3d OR opengl

以我的方式思考d3d和opengl从图形继承对象,那么在尚未构建图形时如何正确编译/链接呢?

因此,我一直在使用选项2创建本地版本,但最近发现其他开发人员一直在使用选项1。

任何澄清我的思想在这里是对还是错的原因都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

如果它们都是静态库,则它们之间应该没有依赖关系。换句话说,他们都是独立的。通过这种方式,它们可以并行构建。

“游戏”项目应该依赖于所有三个静态库,因此它将在构建完所有库之后构建。