Выборочная Сборка Плагинов — Пойдем Другим Путем

Всем привет!

Выборочная сборка плагинов — пойдем другим путем

Небольшая (ну очень маленькая) заметка о том, как позволить плагину самому выбирать, встраивать его в данную систему или нет. Конечно, есть старый добрый способ — просто исключить из сборки сам лишний плагин, например так:

  
  
  
   

# plugins.pro TEMPLATE=subdirs SUBDIRS+=common macx: SUBDIRS+=macplugin win32: SUBDIRS+=winplugin

Но при таком подходе при добавлении каждого нового плагина вам необходимо зарегистрировать его в плагинах.

pro и указать, для каких систем он будет собран.

Если плагинов всего 5 и больше не ожидается, то это нормально.

Но если плагинов уже 20, а планируется еще 30, и многие из них надо компилировать только для определенных платформ, то плагины.

про превращается в помойку.

Если разработчиков несколько, то это создает еще большую путаницу.

Не логичнее ли переложить заботу о том, на каких системах построен плагин, на хрупкие плечи его разработчика? Тогда файл plugins.pro становится совсем простым и понятным:

# plugins.pro TEMPLATE=subdirs SUBDIRS+=common SUBDIRS+=macplugin SUBDIRS+=winplugin

А вот в macplugin.pro вам придется написать что-то вроде этого (для winplugin.pro будет аналогично):

# macplugin.pro macx: { # project configuration here } else { include(.

/nobuild.inc) }

Как видите, теперь осталось только сделать в корне папки с исходниками плагина файл nobuild.inc и прописать в нем что-нибудь, чтобы он отменил сборку плагина.

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

pro файлов пытается собрать все исходники в папку с параметрами по умолчанию.

Это означает, что он попытается скомпилировать исходники плагина в исполняемый файл, а тем более исходники, не предназначенные для данной ОС.

Конечно, в этом случае вы, скорее всего, увидите нечто похожее на картинку в начале темы.

Разорвать документацию по qmake , я не нашел ни одной функции, позволяющей пропустить сборку проекта, поэтому пришлось пойти на грязный хак: заменить компилятор и компоновщик! За что? Ну какая программа есть во всех системах, ничего деструктивного не делает, принимает любые аргументы и всегда возвращает 0? В общем пишем так:

# nobuild.inc QMAKE_CXX=echo QMAKE_LINK=echo win32: { CONFIG-=embed_manifest_exe CONFIG-=embed_manifest_dll TARGET= }

Блок для Windows нужен для того, чтобы qmake не пытался внедрить манифест в несобранный бинарник.



Выборочная сборка плагинов — пойдем другим путем

«Вывод» или что-то в этом роде.

Метод грязный, явный костыль, но работает. И потом - какая программа без костылей? "=" Но если уважаемые хабралюди предложат иной, более адекватный способ решения проблемы, я буду только рад. Теги: #Qt #плагины #взломать #echo #C++ #QMake #build #Qt

Вместе с данным постом часто просматривают: