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

в 11:08, , рубрики: build, c++, echo, hack, plugins, qmake, qt, метки: , , , , , ,

Всем хабрапривет!Qt Software / Выборочная сборка плагинов — мы пойдём иным путём

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

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

Но при таком подходе при добавлении каждого нового плагина надо его прописать в plugins.pro и установить для каких систем он будет собираться. Если плагинов всего-то 5 штук и больше не предвидится, то это нормально. Но если уже есть 20 плагинов, и ещё 30 планируется, причём многие из них должны собираться только под некоторые платформы, то plugins.pro превращается в помойку. Если разработчиков несколько, то это вносит ещё большую путаницу.

Не логичнее ли перенести заботу о том, в каких системах плагину собираться, на хрупкие плечи его разработчика? Тогда файлик 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 файлов пытается собрать все исходники в папке с параметрами по-умолчанию. А значит, попытается исходники плагина собрать в исполняемый файл, да тем более исходники, не предназначенные для данной OS. Разумеется, в этом случае Вы, скорее всего, увидите нечто похожее на картинку в начале топика.

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

В общем, пишем так:

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

Блок для Windows нужен чтобы qmake не пытался внедрить манифест в несобранный бинарник.
Qt Software / Выборочная сборка плагинов — мы пойдём иным путём
«Заключение» или типа того.
Метод грязноват, явный костыль, но он работает. И потом — что за программа без костылей? =)

Но если уважаемые читатели предложат иной, более адекватный метод решения проблемы, буду только рад.

Автор: silvansky


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js