[Решен] Плъгини и компилиране
-
Здравейте!
Последно време се опитвам да отделям част от логиката по различни плъгини. Получават се нещата, създавам си собствен event handler с който предавам информация към плъгините (вместо да правя конкретни слотове и сигнали - дава повече динамичност на проекта). Проблема е че всеки плъгин е отделен проект. В момента за да стартирам програмата с промените по плъгина, първо компилирам плъгина и после записвам .so файла в плъгин директорията на програмта. Да, всичко правя на ръка. Използвам qmake за билдването. Казаха ми че по- добре би било да се използва CMake, но аз предпочитам да си ползвам Qt инструментите. Сигурен съм че има начин да се автоматизира процеса, но може ли това да се направи без модификации по Qt, Qt Designer и Qt Creator при мен - притеснява ме как ще върви deployment-а при потребителите при такова положение. Предполагам че трябва да се добави нещо в Makefile-а, надявам се някой да може да ме насочи какво мога да ползвам и евентуално да ме насочи към материал който да мога да прочета по въпроса.
-
Здравей,
винаги може да си сложиш в Makefile-а или някъде другаде някоя скриптче, коeто да копира файловете. Или дори да си го държиш извън проекта и да си го пускаш, когато искаш.
-
Ако потребителя изтегли сорса, ще трябва да компилира всеки плъгин поотделно, а след това и програмата. Така че проблема по- скоро е как да компилирам всичко с една команда, като се има предвид че трябва и да е crossplatform (за момента имам линукс и уиндоус потребители, след промените които планирам се надявам и на Mac потребители), след което вече да се оправи и копирането. Или рекурсивно да влиза по директориите и да компилира, а за изходен файл да се дава папката за плъгините....
Хич не съм наясно с мейкфайловете =/
-
Разгледай как е структуриран сорса на Qt. Има начин един проект да е под проект на друг. Също мисля, че има как да се вкара проверка на коя ОС-и и да извърши различни неща, ако се наложат някакви скриптове.
-
Мисля че намерих нещо, в pro файла се добавя "SUBDIRS" и се изброяват проектите, не е задължително да са точно .pro файловете на проектите а само името, ако е директория qmake проверява за .pro файл в директорията. Също така и добавянето на dependancy параметри в файла на проекта.
"Цък":http://stackoverflow.com/questions/1417776/how-to-use-qmakes-subdirs-template
"Пак цък":http://stackoverflow.com/questions/781494/how-do-a-specify-a-library-file-dependency-for-qmake-in-qtОстаналото вече е в pro файла на плъгините да им се даде за DESTDIR основната директория, или по- скоро там където трябва да се намират плъгините. И мисля че това ще реши проблема. За съжаление не ми остана време да пробвам. Ще пиша като имам резултат.
-
За всеки който може да го интересува - начина е много лесен, не бих казал особено оригинален, въпреки това предоставя възможности.
Примерна структора на проект с плъгини:
Project
+-- build
+-- common
+-- myproject
+-- otherНека common е библиотека която съдържа важни функции, myproject е основата на проекта (самата програма), other е нещо друго, някоя друга библиотека, а build ще е мястото където ще се запише TARGET-а от всички проекти.
В директория Project (!) се прави нов .pro файл със съдържание:
@
TEMPLATE = subdirs
SUBDIRS = common other myprojectDEPENDPATH += common other
INCLUDEPATH += common otherCONFIG += ordered
CONFIG -= app_bundle
@(За app_bundle не съм сигурен дали е необходимо да го има, не съм пробвал да го махна, но и не ми пречи, за момента го оставям)
Изпълнява се qmake (qmake-qt-4 в някой случай), за да се създаде Makefile-а. Изпълнява се make и компилатора тръгва да обхожда директориите, като ще започне от common, ще премине през other и ще приключи с myproject.
Ако в .pro файловете на отделните проекти е зададен правилно target и най- вече DESTDIR, след приключването на компилацията, всичко ще се намира в build директорията. В случая за "вътрешните" директории, трябва да се добави:
@
DESTDIR = ../build
@При стартирането на make ако няма промени, просто ще мине по директориите и ще каже че няма нищо за правене в съответните директории.
С този метод, отделните проекти могат да се компилират отделно - за тестове, като крайния продукт може бързо и лесно да се компилира по абсолютно същия начин както всеки друг проект в Qt. Тъй като .pro файла в Project директорията има информация за всички други проекти, изчистването на moc, core и обектни файлове във всички проекти е бързо и лесно ;-)