如何使用QMake的subdirs模板?

我开始学习Qt。 我正在从Visual Studio世界转移,并且正在寻找一种使用QMake来组织我的项目结构的方法。 我find了“subdirs”模板,但我很难理解它。

我的项目结构如下所示:

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

我的project.pro看起来像这样

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

在子目录的.pro文件中,我有适当的SOURCESHEADERSRESOURCESvariables集。

请告诉我在.pro文件中应该设置什么TARGETTEMPLATE和其他必要的值。

另外,还有一些比正式版本更好的QMake教程吗?

除了Troubadour的评论之外 ,我还会注意到SUBDIRS目标只适用于指定子目录。 因此,你的额外的行

 SOURCES += main.cpp 

在您的project.pro文件是不正确的,并可能无法build立你的main.cpp文件,在最坏的情况下。 最好的情况是,qmake会拒绝parsing这个文件,因为它有相互冲突的规范。

我已经使用了SUBDIRS模板几次了,如果你可以将部分构build到更多或更less的独立库中,显然就像你将逻辑和GUI分开一样。 这是一个方法来做到这一点:

 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.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 

如果逻辑文件夹和gui文件夹实际上重复某种目标,则使用subdirs 。 一个图书馆,可以build立独立于其他任何东西。 如果是这种情况,那么就使用

 TEMPLATE = lib TARGET = logic CONFIG += dll 

在logic.pro。

如果它们不是独立的目标,而只是存在来组织源文件的文件夹,那么你可以在每个文件中使用一个.pri文件,并将它们包含在.pro中

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

请记住,.pri文件中的文件path与.pro文件相关,而不是 .pri。 顺便说一句,使用.pri文件是可选的,因为您仍然可以直接在.pro文件中列出这些文件夹中的文件。 .pri文件只是使它更整洁,并有助于保持.pro文件更短。