Вопрос

Я начинаю изучать Qt.Я ухожу из мира Visual Studio и ищу способ организовать структуру моего проекта с помощью QMake.Я нашел шаблон «подкаталоги», но мне довольно трудно его понять.

Структура моего проекта выглядит следующим образом:

project_dir/
    main.cpp
    project.pro
    logic/
      logic.pro
      some logic files
    gui/
      gui.pro
      gui files

Мой проект.про выглядит так

TEMPLATE = subdirs
SUBDIRS = logic \
          gui
SOURCES += main.cpp

в .pro файлы для подкаталогов, которые у меня есть соответствующие ИСТОЧНИКИ, ЗАГОЛОВКИ и РЕСУРСЫ набор переменных.

Пожалуйста, скажи мне, что ЦЕЛЬ, ШАБЛОН и другие необходимые значения, которые я должен установить в .pro файлы.

Кроме того, есть ли какой-нибудь хороший учебник по QMake, кроме официального?

Это было полезно?

Решение

В дополнение к Комментарий Трубадура, отмечу, что SUBDIRS target подходит только для указания подкаталогов.Поэтому ваша дополнительная строка

SOURCES += main.cpp

в вашем файле project.pro неверен и, скорее всего, в худшем случае вам не удастся создать файл main.cpp.В лучшем случае qmake откажется анализировать файл, поскольку в нем есть конфликтующие спецификации.

Я использовал SUBDIRS шаблон несколько раз, и это хорошо, если вы можете объединить части в более или менее независимые библиотеки, очевидно, как вы это сделали с раздельными логикой и графическим интерфейсом.Вот один из способов сделать это:

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

проект.про:

TEMPLATE = subdirs
SUBDIRS = logic \
          gui

# build must be last:
CONFIG += ordered
SUBDIRS += build

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.a (in linux).  Uncomment to override.
# TARGET = target

gui/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.a (in linux).  Uncomment to override.
# TARGET = target

сборка/build.pro:

TEMPLATE = app

SOURCES += main.cpp

LIBS += -L../logic -L../gui -llogic -lgui

# Will build the final executable in the main project directory.
TARGET = ../project

Другие советы

Вы используете subdirs , если папки логики и графического интерфейса на самом деле не соответствуют какой-либо цели, например. библиотека, которая может быть построена независимо от чего-либо еще. Если это так, просто используйте

TEMPLATE = lib
TARGET = logic
CONFIG += dll

в logic.pro.

Если они не являются независимыми целями, а являются просто папками, которые существуют для организации исходных файлов, тогда вы можете просто использовать вместо них файл .pri и включать их в .pro, используя

include(logic/logic.pri)
include(gui/gui.pri)

Просто помните, что пути к файлам в файлах .pri относятся к файлу .pro, а не .pri. Кстати, использование файла .pri не является обязательным, поскольку вы можете перечислить файлы в этих папках непосредственно в файле .pro. Файл .pri просто делает его более аккуратным и помогает сократить размер файла .pro.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top