Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Bulgarian
  4. [Решен] Плъгини и компилиране
Forum Updated to NodeBB v4.3 + New Features

[Решен] Плъгини и компилиране

Scheduled Pinned Locked Moved Bulgarian
6 Posts 2 Posters 5.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    Robbin
    wrote on last edited by
    #1

    Здравейте!

    Последно време се опитвам да отделям част от логиката по различни плъгини. Получават се нещата, създавам си собствен event handler с който предавам информация към плъгините (вместо да правя конкретни слотове и сигнали - дава повече динамичност на проекта). Проблема е че всеки плъгин е отделен проект. В момента за да стартирам програмата с промените по плъгина, първо компилирам плъгина и после записвам .so файла в плъгин директорията на програмта. Да, всичко правя на ръка. Използвам qmake за билдването. Казаха ми че по- добре би било да се използва CMake, но аз предпочитам да си ползвам Qt инструментите. Сигурен съм че има начин да се автоматизира процеса, но може ли това да се направи без модификации по Qt, Qt Designer и Qt Creator при мен - притеснява ме как ще върви deployment-а при потребителите при такова положение. Предполагам че трябва да се добави нещо в Makefile-а, надявам се някой да може да ме насочи какво мога да ползвам и евентуално да ме насочи към материал който да мога да прочета по въпроса.

    1 Reply Last reply
    0
    • T Offline
      T Offline
      task_struct
      wrote on last edited by
      #2

      Здравей,

      винаги може да си сложиш в Makefile-а или някъде другаде някоя скриптче, коeто да копира файловете. Или дори да си го държиш извън проекта и да си го пускаш, когато искаш.

      "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

      • Linu...
      1 Reply Last reply
      0
      • R Offline
        R Offline
        Robbin
        wrote on last edited by
        #3

        Ако потребителя изтегли сорса, ще трябва да компилира всеки плъгин поотделно, а след това и програмата. Така че проблема по- скоро е как да компилирам всичко с една команда, като се има предвид че трябва и да е crossplatform (за момента имам линукс и уиндоус потребители, след промените които планирам се надявам и на Mac потребители), след което вече да се оправи и копирането. Или рекурсивно да влиза по директориите и да компилира, а за изходен файл да се дава папката за плъгините....

        Хич не съм наясно с мейкфайловете =/

        1 Reply Last reply
        0
        • T Offline
          T Offline
          task_struct
          wrote on last edited by
          #4

          Разгледай как е структуриран сорса на Qt. Има начин един проект да е под проект на друг. Също мисля, че има как да се вкара проверка на коя ОС-и и да извърши различни неща, ако се наложат някакви скриптове.

          "Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."

          • Linu...
          1 Reply Last reply
          0
          • R Offline
            R Offline
            Robbin
            wrote on last edited by
            #5

            Мисля че намерих нещо, в 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 основната директория, или по- скоро там където трябва да се намират плъгините. И мисля че това ще реши проблема. За съжаление не ми остана време да пробвам. Ще пиша като имам резултат.

            1 Reply Last reply
            0
            • R Offline
              R Offline
              Robbin
              wrote on last edited by
              #6

              За всеки който може да го интересува - начина е много лесен, не бих казал особено оригинален, въпреки това предоставя възможности.

              Примерна структора на проект с плъгини:

              Project
              +-- build
              +-- common
              +-- myproject
              +-- other

              Нека common е библиотека която съдържа важни функции, myproject е основата на проекта (самата програма), other е нещо друго, някоя друга библиотека, а build ще е мястото където ще се запише TARGET-а от всички проекти.

              В директория Project (!) се прави нов .pro файл със съдържание:

              @
              TEMPLATE = subdirs
              SUBDIRS = common other myproject

              DEPENDPATH += common other
              INCLUDEPATH += common other

              CONFIG += 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 и обектни файлове във всички проекти е бързо и лесно ;-)

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved