Как получить доступ к interfaces.h, определенному в приложении, из плагинов, находящихся в других репозиториях git? - PullRequest
0 голосов
/ 14 января 2019

Резюме

Qt предлагает интерфейсы для расширения приложений с использованием плагинов. Эти интерфейсы, как правило, определяются в заголовках приложения и включаются в плагины. Если у меня есть разные репозитории git для приложения и плагинов, как я могу масштабировать интерфейсы в плагинах?

Пример

Давайте используем пример Plug & Paint из документации Qt. Это основное приложение и определяет интерфейсы для BrushInterface, ShapeInterface и FilterInterface в interfaces.h.

// plugandpaint/interfaces.h
// (...)
class BrushInterface
{
// (...)
};

class ShapeInterface
{
   // (...)
};

class FilterInterface
{
    // (...)
};
// (...)

Пример Основные инструменты Plug & Paint определяет плагин, соответствующий этим интерфейсам. Для этого он должен включить interfaces.h из приложения в определение класса своего плагина.

// basictools/basictoolsplugin.h
// (...)
#include <plugandpaint/interfaces.h>

class BasicToolsPlugin : public QObject,
                         public BrushInterface,
                         public ShapeInterface,
                         public FilterInterface
// (...)

В примере предполагается, что плагин находится в 2 подпапках под основным приложением, и добавляет следующую строку в файл .pro плагина для включения его заголовков.

INCLUDEPATH  += ../..

Вопрос * * 1023 Это хорошая практика? Должен ли я следовать этому соглашению и всегда клонировать плагины вложенных папок git repos 2 под приложением "hardcoding" INCLUDEPATH как ../..? Одной из альтернатив будет иметь копию файла interfaces.h в плагинах, но тогда изменения в «оригинальном» файле могут сломать плагины. Есть ли способ иметь разные, но совместимые файлы interfaces.h между приложением и плагином? Например, если файл interfaces.h, находящийся в репозитории приложения, добавляет / удаляет интерфейсы, не используемые плагином, это повлияет на его использование?

1 Ответ

0 голосов
/ 14 января 2019

Мой совет - использовать общий репозиторий для интерфейсов заголовков в вашем конкретном случае, так как вы являетесь и создателем, и потребителем ваших плагинов. IIRC, это то, что я делал в похожем приложении давным-давно (приложение и плагины будут использовать этот дополнительный репозиторий в качестве подмодуля).

Для сторонних пользователей, заголовки должны быть установлены после установки приложения, и этот путь должен быть установлен при сборке ваших плагинов (например, CMake с использованием MyApp.cmake).

Итак, два решения, в зависимости от использования интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...