Evgenii Legotckoi
Evgenii LegotckoiҚаз. 16, 2015, 12:25 Т.Қ.

Qt/C++ - 025-сабақ. Qmake утилитасымен құрастыру үшін жоба файлдарын жасау

Файлдар жобасында қолданбаны, кітапхананы немесе плагинді құру үшін qmake талап ететін барлық ақпарат бар. Негізінде, сіз жобадағы ресурстарды көрсету үшін мәлімдемелер қатарын пайдаланасыз, бірақ қарапайым бағдарламалау құрылымдарын қолдау әртүрлі платформалар мен орталар үшін әртүрлі құрастыру процестерін сипаттауға мүмкіндік береді.

Жоба файлының элементтері

qmake пайдаланатын жоба файл пішімін қарапайым және өте күрделі жүйелерді қолдау үшін пайдалануға болады. Қарапайым файл жобасы жобадағы бастапқы және тақырып файлдарын анықтайтын айнымалы мәндерді жариялайтын қарапайым декларативті стильді пайдаланады. Күрделі жобалар құрастыру процесін басқару үшін ағындық құрылымдарды пайдалана алады.

Айнымалылар

Жоба файлында айнымалылар жолдар тізімін сақтау үшін пайдаланылады. Ең қарапайым жобада бұл айнымалы мәндер qmake қолданбасын пайдалану опцияларын орнату туралы немесе құрастыру процесі кезінде пайдаланылатын файл атаулары мен жолдарын қамтамасыз ету туралы хабарлайды.

qmake әрбір жоба файлында осы айнымалы мәндерді іздейді және Makefile файлына не жазылу керектігін анықтау үшін мазмұн арқылы пайдаланылады. Мысалы, HEADERS және SOURCES мәндер тізімі айнымалылар кейбір каталогтардағы qmake және тақырып файлдарын хабардар ету үшін пайдаланылады.

Айнымалы мәндерді уақытша мәндер тізімдерін сақтау үшін іштей пайдалануға болады, ал мәндердің бар тізімдерін жаңа мәндермен қайта жазуға немесе кеңейтуге болады.

Айнымалыға мәндер тізімін тағайындау:

HEADERS = mainwindow.h paintwidget.h

Айнымалы мәндердің тізімі келесідей кеңейтіледі:

SOURCES = main.cpp mainwindow.cpp \
          paintwidget.cpp
CONFIG += console

Ескертпе: Мәндердің бірінші декларациясы HEADERS айнымалысымен бір жолда пайда болатын мәндерді ғана қамтиды. Екінші мәлімдеме SOURCES мәндеріндегідей мәндерді бөледі. кері қиғаш сызықпен айнымалы («\»).

CONFIG айнымалысы Makefile файлын жасау кезінде qmake пайдаланатын басқа арнайы айнымалы болып табылады.


Айнымалылар тізімі

Төменде ең жиі қолданылатын айнымалылар тізімі және олардың мазмұнының сипаттамасы берілген.

  • CONFIG - жобаның негізгі параметрлері
  • DESTDIR - екілік немесе орындалатын файл орналастырылатын каталог
  • FORMS - пайдаланушы интерфейсін жүзеге асыратын UI файлдарының тізімі
  • HEADERS - тақырып файл атауларының тізімі (.h) және олардың жолдары
  • QT - жобада қолданылатын Qt модульдерінің тізімі
  • РЕСУРСТАР - қорытынды жобаға енгізілген ресурс файлдарының (.qrc) тізімі.
  • SOURCES - жобаны құру кезінде пайдаланылатын бастапқы код файлдарының тізімі.
  • ҮЛГІЛЕР - жобада қолданылатын үлгі. Компиляциядан, қолданбадан, кітапханадан немесе плагиннен кейін жоба қандай болатынын анықтайды.

Айнымалылардың мазмұнын басқа айнымалылардың атауының алдына екі $ белгісін қою арқылы басқа айнымалыларға тағайындауға болады.

Бос орындар

Әдетте, бос орындар айнымалы мәндерді бөледі. Атауында бос орын бар айнымалы мәнді көрсету үшін айнымалыны жақшаға алу керек:

DEST = "Program Files"

Жақшаға алынған мәтін айнымалылар тізіміндегі бір элемент ретінде есептеледі. Ұқсас тәсіл басқа жағдайларда да қолданылады. Мысалы, бос орындар бар файлдарға жолды көрсеткенде:

win32:INCLUDEPATH += "C:/mylibs/extra headers"
unix:INCLUDEPATH += "/home/user/extra headers"

Пікірлер

Сіз әдетте жоба файлдарына түсініктеме қосасыз. Пікірлер # белгісінен басталып, бір жолдың соңына дейін жалғасады.

# Comments usually start at the beginning of a line, but they
# can also follow other content on the same line.

Кірістірілген функциялар және ағынды басқару

qmake айнымалылардың мазмұнын қосу үшін бірнеше кірістірілген функцияларды қамтамасыз етеді. Қарапайым жобаларда жиі қолданылатын функция файл атауын аргумент ретінде қабылдайтын include(), функциясы болып табылады. Файлдың мазмұны жобаға қосу функциясы қолданылған жерде қосылады. Қосу функциясы әдетте басқа файл жобаларын қосу үшін пайдаланылады.

include(other.pro)

Шартты құрылымдарды қолдау бағдарламалау тіліндегі мәлімдемелер сияқты әрекет ететін қол жетімді аумақтарды жасайды:

win32 {
    SOURCES += paintwidget\_win.cpp
}

Жақша ішіндегі тапсырма, егер ол ақиқат болса, орындалады. Бұл жағдайда win32 CONFIG опциясында орнатылуы керек. Бұл Windows жүйесінде автоматты түрде орын алады. Ашылатын жақша шарт сияқты бір жолда пайда болуы керек.

Айнымалылардағы күрделірек операциялар әдетте find(), бірегей(), count() сияқты кіріктірілген функциялармен қамтамасыз етілетін циклдарды қажет етеді. Бұл функциялар және басқа да көптеген функциялар жолды және жолды өңдеуді қамтамасыз етеді. сыртқы құралдарды енгізу және шақыру.

Үлгі жобасы

ҮЛГІК айнымалысы құрылатын жобаның түрін жариялау үшін пайдаланылады. Егер жоба файлында жарияланбаса, qmake жобаны қолданба ретінде құрастырады және Makefile немесе баламасын жасайды.

Төменде qmake құру үшін қолжетімді жоба түрлері және олардың сипаттамалары берілген.

  • қолданба (әдепкі) - Makefile қолданбаға енгізілген
  • lib - Makefile кітапханаға салынған
  • aux - Makefile ештеңе істемейді. Компилятор қажет болмаған кезде пайдаланылады, бірақ мақсатты жасау қажет, мысалы, жоба түсіндірілетін тілде жазылған болса.
  • ішкі каталогтар - Makefile SUBDIRS айнымалысы арқылы көрсетілген ішкі каталогтарға арналған ережелерді қамтиды. Әрбір ішкі каталогта өзінің жеке жоба файлы болуы керек.
  • vcapp - қолданбаға құрастыруға арналған Visual Studio Project файлы
  • vclib - кітапханаға құрастыру үшін Visual Srudio Project файлы
  • vcsubdirs - ішкі каталогтарда жобаны құруға арналған Visual Studio Project файлы

Ішкі каталогтар пайдаланылған кезде, qmake әрбір ішкі каталог үшін Makefile жасайды, ол тапқан кез келген жоба файлдарын орындайды және жаңадан жасалған Makefile файлында make іске қосады. SUBDIRS айнымалысы тізімді қамту үшін пайдаланылады. жұмыс орындалатын барлық ішкі каталогтардың.

Негізгі конфигурация

CONFIG айнымалысы жобада орындалатын опциялар мен функцияларды анықтайды.

Жобаны жөндеу және шығару режимінде немесе екеуінде де салуға болады. Түзету және шығару бір уақытта көрсетілсе, соңғысы күшіне енеді. debug_and_release көрсетілсе, жобаның екі нұсқасы да құрастырылады. qmake арқылы жасалған Makefile екі нұсқаны құрайтын ережені қамтиды. Мұны келесі жолмен жасауға болады.

make all

Добавление **build\_all**в переменную **CONFIG** создаёт правило по умолчанию, когда собирается проект.

Ескертпе CONFIG айнымалысы жобаны құру үшін белгілі бір опциялар пайдаланылса немесе пайдаланылмаса, құрастыру шарттары да болуы мүмкін.

CONFIG(opengl) {
    message(Building with OpenGL support.)
} else {
    message(OpenGL support is not available.)
}

Бұл жағдайда жөндеу және шығару құрастырулары үшін әртүрлі конфигурациялар қосылады.

Ескертпе Бұл опциялардың кейбірі құрастыру платформасына сәйкес келсе ғана күшіне енеді.

  • qt - Жоба Qt қолданбасы болып табылады және Qt кітапханасымен байланыстырылуы керек. Қолданбаны құру үшін қажет Qt модульдерін қосуды басқару үшін QT айнымалы мәнін пайдалану керек. Бұл мән әдепкі бойынша қосылады, бірақ оны Qt емес жобада qmake арқылы жоюға болады.
  • x11 - жоба x11 қолданбасы немесе кітапханасы. Егер мақсат Qt болса, бұл мән қажет емес.

Қолданба үлгілері мен кітапханалар сізге құрастыру процесі үшін көбірек мамандандырылған опцияларды ұсынады. Мысалы, қолданбаңыз Qt кітапханасын пайдаланса және сіз отладка режимінде құрастырғыңыз келсе, жобаңызда келесі жол болуы керек:

CONFIG += qt debug

Ескертпе Сіз "=" емес, "+=" пайдалануыңыз керек немесе qmake Qt параметрлерін пайдалануды қоспайды.

Qt кітапханаларын жариялау

CONFIG айнымалысы qt мәнін қамтыса, Qt қолданбалары үшін qmake қосылады. Бұл қолданбада қандай Qt модульдері қолданылатынын анықтауға мүмкіндік береді. Мұның артықшылығы QT айнымалысы тек қажетті кітапханалар мен модульдерді жариялау үшін пайдаланылуы мүмкін. Мысалы, біз келесідей XML және желі модульдерін қоса аламыз:

QT += network xml

Ескертпе QT әдепкі бойынша core және gui модульдерін, сондай-ақ XML және желілік модульдерді қамтиды. Модуль айнымалысының келесі түрі тағайындауға core және gui кірмейді және құрастыру қателеріне әкеледі.

QT = network xml # This will omit the core and gui modules.

Егер жобаны gui, модулінсіз құрастырғыңыз келсе, оны келесі "-=" операторымен алып тастауыңыз керек.

QT -= gui # Only the core module is used.

Параметрлер

qmake .prf файлдарында көрсетілетін кеңейтілген теңшеу функцияларына орнатылуы мүмкін. Бұл кеңейтілген мүмкіндіктер құрастыру процесі кезінде жиі реттелетін құралдарға қолдау көрсетеді. Құрастыру процесіне функцияларды қосу үшін функция атауын CONFIG. айнымалысына қосыңыз

Мысалы, qmake D-Bus және ogg кітапханалары сияқты pkg-config қолдайтын сыртқы кітапханалармен құрастыру үшін конфигурациялануы мүмкін.

CONFIG += link\_pkgconfig
PKGCONFIG += ogg dbus-1

Басқа кітапханаларды жариялау

Егер жобаңызда Qt модульдерінен басқа басқа кітапханалар пайдаланылса, оларды жоба файлында көрсету керек.

qmake кітапханаларды іздейтін жолдар LIBS айнымалысында көрсетілген. Кітапхана жолын Unix-стиль арқылы көрсетуге болады.

LIBS += -L/usr/local/lib -lmath

Тақырып файлдары бар жолдарды INCLUDEPATH айнымалысы арқылы ұқсас жолмен көрсетуге болады.

INCLUDEPATH = c:/msdev/include d:/stl/include
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

alex_lip
  • Қаң. 31, 2018, 12:56 Т.Ж.

В главе

Объявление Qt библиотек - "Это желает возможным определять" - видимо опечатка -  "делает"

Evgenii Legotckoi
  • Қаң. 31, 2018, 3:51 Т.Ж.

Да, спасибо. Опечатка, вернее невнимательно работал с переводом.

d
  • Қыр. 3, 2018, 9:07 Т.Ж.

а можно как-то исключить xml и network? потому как QT -= network не помогает и сборка все-равно идет с модулем network

Evgenii Legotckoi
  • Қыр. 5, 2018, 3:59 Т.Ж.

Вы перезапускали qmake после добавленияQT -=xml network?

В данном случае нужно перезапустить qmake и лучше сделать чистую сборку
d
  • Қыр. 14, 2018, 5:48 Т.Ж.

добавляю QT -= xml network в файл проекта .pro

# make clean

# rm .qmake.stash Makefile

# qmake

# make



И все-равно в параметрах arm-linux-gnueabihf-g++ имеет место быть  -lQt5Quick -lQt5Gui -lQt5Qml -lQt5SerialPort -lQt5Core -lGLESv2 -lpthread


В 5.9 такого не было, возможно в 5.11 при использовании Serialport он сам еще и сеть подключает, даже и не знаю

Evgenii Legotckoi
  • Қыр. 15, 2018, 6:29 Т.Ж.

Как вариант, для SerialPort может использоваться внутренняя петля, loopback. Может поэтому и тянет с собой эти зависимости. Но это можно проверить, если запустить без этих библиотек собранный проект.

Есть ещё такая мысль, что это может быть багом. У нас на работе когда билд собирается, тоже тянет библиотеки, которые по идее не должны там присутствовать, например, тот же самый Qml, поскольку мы его не используем. Но если учесть, что сам софт занимает пару гигабайт, то пара лишних библиотек на пару десятков мегабайт уже никого не волнует.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз