QMake

Когда говорят про разработку приложений с графическим интерфейсом пользователя (GUI) на базе набора средств (взаимосфазанныйх компонент) - фреймворка Qt, то чаще всего подразумевают и такой же графический инструмент QtCreator. Но на самом деле, если разобраться, то сам QtCreator не умеет по сути самостоятельно создать ни одного приложения. Все действия по компиляции, компоновке, отладке, установлении связей между частями исходного кода приложения он перепоручает таким средствам командной строки как: компилятор g++ или clang++, компоновщик ld из двоичных утилит, отладчик gdb, и средства сборки qmake или cmake. Также в 6-й версии Qt планируется полностью перейти на qbs (Qt Build System).

Также, важным моментом следует отметить, что программист на фреймворке Qt пишет код не на чистом C++ а на так называемом метаязыке используя дополнительные ключевые слова, такие как '''slot:''', '''signals:''' и др., а также специальные макросы. Весь этот код перед комиляцией C++, проходит предобработки т.н. метаобъектным компилятором moc, который, опять-таки работает из командной строки. Обычно он не вызывается напрямую. А программу с нужными параметрами запускают другие программы из командной оболочки. Об этом вскоре и будет упомянуто подробней.

Т.е. по сути дела QtCreator формирует вызовы, допустим, к тому же qmake, формируя файл проекта, где, в свою очередь указыван файл с исходным кодом.

Но можно обходиться и без посредников вроде таких мощных сред как Qt, а редактировать файл проекта в любимом текстовом редакторе и запускать qmake непосредственно из командной строки.

Всё даже проще, чем может показаться на первый взгляд. Что продемонстрирует следующий пример. В любимом текстовом редакторе создадим в пустом каталоге (например, QGUIApplication) файл с именем, например, main.cxx на языке C++ из менее 10 строчек:

#include <QGuiApplication>

int main(int argc, char **argv){
    GuiApplication guiapp(argc, argv);
        guiapp.show();
    return guiapp.exec();
}

Теперь создадим файл-шаблон для проекта

qmake -project

Получаем такой файл-заготовку для проекта QGUIApplication.pro. Очевидно что его имя совпадает с именем каталога, а расширение указывает на формат проекта. Именно такого рода файлы и контроллирует среда QtCreator.

Получаем такие значимые в содержимом строки:

TEMPLATE = app
TARGET = QGUIApplication
INCLUDEPATH += .
SOURCES += main.cxx

Параметр TEMPLATE указывает на использование схемы создания приложения.

Параметр TAGET даёт имя исполнимому файлу приложения.

INCLUDEPATH += . - добавляет текущий каталог к списку поиска подключаемых файлов: директива #include в исходных текстах на языке C++.

Исходный материал для сборки приложения. В нашем случае один: SOURCES += main.cxx

После этого можно из файла проекта создать Makefile для использования Unix-утилитой make. Для этого запускается qmake в рабочем каталоге без параметров. Если qmake обнаружила, что исходный код написан использованием метаязыка программирования, будет правильно установлен вызов программы moc.

Подробности по qmake он может рассказать о себе сам:

qmake -help