В каком порядке я должен строить свои статические библиотеки C ++ - PullRequest
0 голосов
/ 04 мая 2018

У меня есть 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.

Итак, у меня есть 4 проекта, открытых в моем решении Visual Studio. 1 для игры, затем 1 для каждой библиотеки.

Вариант 1) Я ссылаюсь на проекты d3d и opengl в общем графическом проекте, поэтому мой порядок сборки:

d3d OR opengl
Then graphics

Вариант 2) d3d и opengl ссылаются на общую графику, поэтому мой порядок сборки:

graphics
d3d OR opengl

На мой взгляд, d3d и opengl наследуют объекты от графики, так как они могут правильно компилироваться / связываться, когда графика еще не построена?

Поэтому я некоторое время создавал локальные сборки, используя Вариант 2, но недавно обнаружил, что другие разработчики используют Вариант 1.

Буду очень признателен за любые разъяснения, правильное или неправильное мое мышление здесь и почему.

1 Ответ

0 голосов
/ 04 мая 2018

Если все они являются статическими библиотеками, между ними не должно быть никаких зависимостей. Другими словами, они все независимы. Таким образом, они могут строить параллельно.

Проект "игра" должен зависеть от всех трех статических библиотек, поэтому он будет собран после того, как все библиотеки собраны.

...