Поиск…


Файл по умолчанию «pro».

qmake - это инструмент автоматизации сборки, который поставляется с картой Qt . Он выполняет аналогичную работу с такими инструментами, как CMake или GNU Autotools , но предназначен для использования именно с Qt . Таким образом, он хорошо интегрирован с Qt- экосистемой, в частности с Qt Creator IDE.

Если вы запустите Qt Creator и выберите File -> New File or Project -> Application -> Qt Widgets приложение File -> New File or Project -> Application -> Qt Widgets , Qt Creator создаст скелет проекта для вас вместе с файлом «pro». Файл «pro» обрабатывается qmake для генерации файлов, которые в свою очередь обрабатываются базовыми системами построения (например, GNU Make или nmake ).

Если вы назвали свой проект «myapp», появится файл «myapp.pro». Вот как выглядит такой файл по умолчанию с комментариями, которые описывают каждую переменную qmake .

# Tells build system that project uses Qt Core and Qt GUI modules.
QT       += core gui

# Prior to Qt 5 widgets were part of Qt GUI module. In Qt 5 we need to add Qt Widgets module.
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# Specifies name of the binary.
TARGET = myapp

# Denotes that project is an application.
TEMPLATE = app

# List of source files (note: Qt Creator will take care about this list, you don't need to update is manually).
SOURCES += main.cpp\
        mainwindow.cpp

# List of header files (note: Qt Creator will take care about this list).
HEADERS  += mainwindow.h

# List of "ui" files for a tool called Qt Designer, which is embedded into Qt Creator in newer versions of IDE (note: Qt Creator will take care about this list).
FORMS    += mainwindow.ui

Сохранение структуры исходного каталога в опции сборки (недокументированная опция «object_parallel_to_source»).

Если вам нравится организовывать проект, сохраняя исходные файлы в разных подкаталогах, вы должны знать, что во время сборки qmake не сохранит эту структуру каталогов и сохранит все «.o» файлы в одном каталоге сборки. Это может быть проблемой, если у вас возникли конфликтующие имена файлов в разных каталогах, например, следующие.

src/file1.cpp
src/plugin/file1.cpp

Теперь qmake решит создать два файла «file1.o» в каталоге сборки, в результате чего один из них будет перезаписан другим. Бульду не удастся. Чтобы предотвратить это, вы можете добавить CONFIG += object_parallel_to_source конфигурации CONFIG += object_parallel_to_source в ваш файл «pro». Это позволит qmake генерировать файлы сборки, которые сохраняют структуру исходного каталога. Таким образом, ваш каталог сборки будет отражать структуру исходного каталога, а объектные файлы будут созданы в отдельных подкаталогах.

src/file1.o
src/plugin/file1.o

Полный пример.

QT += core
TARGET = myapp
TEMPLATE = app

CONFIG += object_parallel_to_source

SOURCES += src/file1.cpp \
           src/plugin/file1.cpp

HEADERS  += src/plugin/file1.h

Обратите внимание, что опция object_parallel_to_source CONFIG официально не документирована .

Простой пример (Linux)

window.h

#include <QWidget>

class Window : public QWidget
{
    Q_OBJECT
public:
    Window(QWidget *parent = Q_NULLPTR) : QWidget(parent) {}
}

main.cpp

#include <QApplication>
#include "Window.h"

int main()
{
    QApplication app;
    Window window;
    window.show();
    return app.exec();
}

example.pro

# The QT variable controls what modules are included in compilation.
# Note that the 'core' and 'gui' modules are included by default.
# For widget-based GUI applications, the 'widgets' module needs to be added.
QT += widgets  

HEADERS = Window.h # Everything added to the HEADER variable will be checked 
                   # to see if moc needs to run on it, and it will be run if
                   # so.

SOURCES = main.cpp # Everything added to the SOURCES variable will be compiled
                   # and (in the simple example) added to the resulting
                   # executable.

Командная строка

# Assuming you are in a folder that contains the above files.
> qmake         # You can also add the example.pro file if needed
> make          # qmake creates a Makefile, this runs make on it.
> ./example     # The name of the executable defaults to the .pro file name.

Пример SUBDIRS

Возможность SUBDIRS qmake может быть использована для компиляции набора библиотек, каждый из которых зависит от другого. Пример ниже немного запутан, чтобы показать изменения с способностью SUBDIRS.

Структура каталога

Некоторые из следующих файлов будут опущены в интересах краткости. Их можно считать форматом как не-subdir-примерами.

project_dir/
-project.pro
-common.pri
-build.pro
-main.cpp
-logic/
----logic.pro
----some logic files
-gui/
----gui.pro
----gui files

project.pro

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

TEMPLATE = subdirs  # This changes to the subdirs function.  You can't combine 
                    # compiling code and the subdirs function in the same .pro
                    # file.

# By default, you assign a directory to the SUBDIRS variable, and qmake looks
# inside that directory for a <dirname>.pro file.
SUBDIRS = logic

# You can append as many items as desired.  You can also specify the .pro file
# directly if need be.
SUBDIRS += gui/gui.pro

# You can also create a target that isn't a subdirectory, or that refers to a
# different file(*).
SUBDIRS += build
build.file = build.pro # This specifies the .pro file to use
# You can also use this to specify dependencies.  In this case, we don't want 
# the build target to run until after the logic and gui targets are complete.
build.depends = logic gui/gui.pro

(*) См . Справочную документацию для других опций для целевого объекта subd.

common.pri

#Includes common configuration for all subdirectory .pro files.
INCLUDEPATH += . ..
WARNINGS += -Wall

TEMPLATE = lib

# The following keeps the generated files at least somewhat separate 
# from the source files.
UI_DIR = uics
MOC_DIR = mocs
OBJECTS_DIR = objs

Логика / logic.pro

# Check if the config file exists
! include( ../common.pri ) {
    error( "Couldn't find the common.pri file!" )
}

HEADERS += logic.h
SOURCES += logic.cpp

# By default, TARGET is the same as the directory, so it will make 
# liblogic.so (in linux).  Uncomment to override.
# TARGET = target

гуй / gui.pro

! include( ../common.pri ) {
    error( "Couldn't find the common.pri file!" )
}

FORMS += gui.ui
HEADERS += gui.h
SOURCES += gui.cpp

# By default, TARGET is the same as the directory, so it will make 
# libgui.so (in linux).  Uncomment to override.
# TARGET = target

build.pro

TEMPLATE = app

SOURCES += main.cpp

LIBS += -Llogic -Lgui -llogic -lgui

# This renames the resulting executable
TARGET = project

Командная строка

# Assumes you are in the project_dir directory
> qmake project.pro # specific the .pro file since there are multiple here.
> make -n2 # This makes logic and gui concurrently, then the build Makefile.
> ./project # Run the resulting executable.

Пример библиотеки

Простой пример создания библиотеки (а не исполняемого файла, который является значением по умолчанию). Переменная TEMPLATE указывает тип проекта, который вы создаете. lib позволяет makefile создавать библиотеку.

library.pro

HEADERS += library.h
SOURCES += library.cpp

TEMPLATE = lib

# By default, qmake will make a shared library.  Uncomment to make the library 
# static.
# CONFIG += staticlib

# By default, TARGET is the same as the directory, so it will make 
# liblibrary.so or liblibrary.a (in linux).  Uncomment to override.
# TARGET = target

Когда вы создаете библиотеку, вы можете добавить опции dll (по умолчанию), staticlib или plugin в CONFIG .

Создание файла проекта из существующего кода

Если у вас есть каталог с существующими исходными файлами, вы можете использовать qmake с -project -Возможность создать файл проекта.

Предположим, папка MyProgram содержит следующие файлы:

  • main.cpp
  • foo.h
  • foo.cpp
  • bar.h
  • bar.cpp
  • подкаталог / foobar.h
  • подкаталог / foobar.cpp

Затем, позвонив

qmake -project

файл MyProgram.pro создается со следующим содержимым:

######################################################################
# Automatically generated by qmake (3.0) Mi. Sep. 7 23:36:56 2016
######################################################################

TEMPLATE = app
TARGET = MyProgram
INCLUDEPATH += .

# Input
HEADERS += bar.h foo.h subdir/foobar.h
SOURCES += bar.cpp foo.cpp main.cpp subdir/foobar.cpp

Затем код можно построить, как описано в этом простом примере .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow