Pregunta

Estoy empezando a aprender Qt. Me estoy mudando del mundo de Visual Studio y estoy buscando una forma de organizar la estructura de mi proyecto usando QMake. He encontrado la plantilla 'subdireccionar' pero me cuesta mucho entenderla.

La estructura de mi proyecto se ve así:

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

Mi project.pro tiene este aspecto

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

En los archivos .pro para los subdirectorios tengo el conjunto de variables FUENTES , HEADERS y RECURSOS apropiados.

Por favor, dígame qué OBJETIVO , PLANTILLA y otros valores necesarios que debo establecer en los archivos .pro .

Además, ¿hay algún buen tutorial de QMake que no sea el oficial?

¿Fue útil?

Solución

Además de comentario del trovador , quisiera señalar que el objetivo SUBDIRS solo es bueno para especificar subdirectorios. Por lo tanto, su línea adicional de

SOURCES += main.cpp

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

He usado la plantilla SUBDIRS varias veces, y funciona bien si puedes construir partes en bibliotecas más o menos independientes, aparentemente como lo has hecho con la lógica y la interfaz gráfica de usuario separadas . Aquí hay una forma 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

Otros consejos

Usas subdirs si las carpetas de lógica y gui realmente repelen algún tipo de objetivo, por ejemplo. Una biblioteca, que se puede construir independientemente de cualquier otra cosa. Si ese es el caso, simplemente use

TEMPLATE = lib
TARGET = logic
CONFIG += dll

en logic.pro.

Si no son objetivos independientes sino que son carpetas que existen para organizar los archivos de origen, puede usar un archivo .pri en cada uno e incluirlos dentro del .pro usando

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

Solo recuerde que las rutas de los archivos .pri son relativas al archivo .pro y no al .pri. Por cierto, el uso de un archivo .pri es opcional, ya que aún puede enumerar 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top