Всем привет!
Небольшая (ну очень маленькая) заметка о том, как позволить плагину самому выбирать, встраивать его в данную систему или нет. Конечно, есть старый добрый способ — просто исключить из сборки сам лишний плагин, например так:
Но при таком подходе при добавлении каждого нового плагина вам необходимо зарегистрировать его в плагинах.# 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
-
Цифровые Вывески – Новый Путь К Медиа!
19 Oct, 24 -
Идеальный Хабратопик
19 Oct, 24 -
Adobe Photoshop Cs3
19 Oct, 24 -
Какой Век Сегодня?
19 Oct, 24 -
Ценовая Политика Оптимиста
19 Oct, 24 -
Какие Функции Iphone Должен Перенять У N800?
19 Oct, 24