Pergunta

Estou começando a aprender Qt. Eu estou movendo do mundo Visual Studio e eu estou procurando uma maneira de organizar a estrutura do meu projeto usando QMake. Eu encontrei o modelo 'subdirs' mas eu tenho bastante dificuldade em entender isso.

As minhas estrutura do projeto se parece com isso:

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

Meu project.pro olhares como este

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

No .pro arquivos para os subdiretórios tenho apropriada FONTES , HEADERS e RECURSOS variáveis ??definido.

Por favor me diga o TARGET , template e outros valores necessários devo definidas no .pro arquivos.

Além disso, há alguma boa QMake tutorial diferente daquele oficial?

Foi útil?

Solução

Além do Troubadour comentário , gostaria de observar que o alvo SUBDIRS só é bom para especificar subdiretórios. Portanto, sua linha extra de

SOURCES += main.cpp

em seu arquivo project.pro é incorreto, e provavelmente irá falhar para construir seu arquivo de main.cpp, na pior das hipóteses. Na melhor das hipóteses, qmake se recusará a analisar o arquivo, uma vez que tem conflitantes especificações nele.

Eu usei o modelo SUBDIRS algumas vezes, e ele faz bem se você pode construir peças em bibliotecas mais ou menos independentes, aparentemente como você tem com a lógica e os gui separar. Aqui está uma maneira de fazer isso:

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

lógica / 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

Outras dicas

Você usa subdirs se as pastas de lógica e gui realmente repesent algum tipo de alvo, por exemplo. uma biblioteca, que pode ser construído de forma independente de qualquer outra coisa. Se for esse o caso, então é só usar

TEMPLATE = lib
TARGET = logic
CONFIG += dll

em logic.pro.

Se eles não são alvos independentes, mas são apenas pastas que existem para organizar os arquivos fontes, então você pode apenas usar um arquivo .pri em cada vez e incluí-los dentro do .pro usando

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

Basta lembrar que os caminhos de arquivo nos arquivos .pri são em relação ao arquivo .pro e não o .pri. BTW, o uso de um arquivo .pri é opcional, você ainda pode listar os arquivos das pastas diretamente no arquivo .pro. O arquivo .pri apenas que o torna pouco mais limpa e ajuda a manter o arquivo .pro mais curto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top