qt qmake subdirs

qt - ¿Cómo usar la plantilla de subdirectorios de QMake?



subdirs (2)

Estoy empezando a aprender Qt. Me estoy moviendo del mundo de Visual Studio y estoy buscando una forma de organizar la estructura de mi proyecto usando QMake. Encontré la plantilla ''subdirectorios'', pero me cuesta bastante entenderla.

Mi estructura de proyecto se ve así:

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

Mi project.pro se parece a esto

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

En los archivos .pro para los subdirectorios, tengo las variables apropiadas SOURCES , HEADERS y RESOURCES .

Por favor, dígame qué TARGET , TEMPLATE y otros valores necesarios debo establecer en los archivos .pro .

Además, ¿hay algún buen tutorial de QMake aparte del oficial?


Además del comentario de Troubadour , señalaría que el objetivo SUBDIRS solo sirve para especificar subdirectorios. Por lo tanto, su línea adicional de

SOURCES += main.cpp

en su archivo project.pro es incorrecto, y probablemente no logre construir su archivo main.cpp, en el peor. En el mejor de los casos, qmake se negará a analizar el archivo, ya que contiene especificaciones contradictorias.

He usado la plantilla SUBDIRS varias veces, y funciona bien si puedes construir partes en bibliotecas más o menos independientes, al parecer como lo has hecho con la lógica y la interfaz gráfica separadas. Aquí hay una manera de hacer esto:

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

project.pro:

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 / 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 / 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 si las carpetas de lógica y gui realmente representan algún tipo de objetivo, ej. una biblioteca, que se puede construir independientemente de cualquier otra cosa. Si ese es el caso, solo usa

TEMPLATE = lib TARGET = logic CONFIG += dll

en logic.pro.

Si no son objetivos independientes, sino solo carpetas que existen para organizar los archivos de fuentes, puede utilizar un archivo .pri en cada uno e incluirlos en .pro usando

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

Solo recuerde que las rutas de archivos en los archivos .pri son relativas al archivo .pro y no al .pri. Por cierto, el uso de un archivo .pri es opcional, ya que puede seguir enumerando los archivos en esas carpetas directamente en el archivo .pro. El archivo .pri lo hace un poco más ordenado y ayuda a mantener el archivo .pro más corto.