我正在寻找一种使用 QMake 来组织我的项目结构的方法。我找到了 subdirs
模板,但我很难理解它。我试图做这样的事情。谁能告诉我我是否正确。
编辑:我已阅读以下线程 How to use QMake's subdirs template?但我仍然卡住
我的项目结构如下:
MultiFuncTester.pro
- DMM
(DMM.cpp, DMM.h and Multifunctester.pri)
-Safety
(Safety.cpp, Safety.h and Multifunctester.pri)
-Solar
(Solar.cpp, Solar.h and Multifunctester.pri)
Main
(Main.pro, Main.cpp and Multifunctester.pri)
这里 Multifunctester.pri 文件包含所有子目录的通用内容。
我正在粘贴 MultiFuncTester.pro 和 .pri 文件以及 main.pro 文件
我已将项目的 pro 文件制作为 MultiFuncTester.pro :
# build all components recursive
TEMPLATE = subdirs
######## normal build process ########
#
# Make sure your Main.pro is in the last line to ensure correct linking!
#
SUBDIRS = ../../MultiFuncTester/Components/Solar/Build/Solar.pro \
../../MultiFuncTester/Components/DMM/Build/DMM.pro \
../../MultiFuncTester/Components/Safety/Build/Safety.pro \
../../MultiFuncTester/Components/Setup/Build/Setup.pro \
../../MultiFuncTester/Components/Start/Build/Start.pro \
../../MultiFuncTester/Components/Main/Build/Main.pro \
CONFIG += ordered
MultiFunctester.pri 文件:
######################
# common stuff for all components
######################
TEMPLATE = lib
CONFIG += static \
warn_on \
qt \
thread \
rtti
QT += core \
gui
INCLUDEPATH +=/..\
../../MultiFuncTester/Components \
DEPENDPATH +=/..\
../../MultiFuncTester/Components \
CONFIG += debug_and_release
CONFIG += build_all
QMAKE_CXXFLAGS += -Wall
CONFIG(debug, debug|release) {
CONFIG_SUFFIX = dbg
} else {
CONFIG_SUFFIX = rel
DEFINES += QT_NO_DEBUG \
QT_NO_DEBUG_OUTPUT \
DBT_TRACE_DISCARD \
NDEBUG
CONFIG(gcov) {
QMAKE_CXXFLAGS_RELEASE += -fprofile-arcs -ftest-coverage
QMAKE_LFLAGS_RELEASE += -fprofile-arcs
QMAKE_CXXFLAGS_RELEASE -= -O2
QMAKE_CXXFLAGS_RELEASE += -O0
}
}
CONFIG(crosstgt) {
### To be able to build Target run qmake as follows:
#qmake CONFIG+=crosstgt
CONFIG_SUFFIX = $${CONFIG_SUFFIX}_tgt
DEFINES += TARGET_BUILD
}
OBJECTS_DIR = obj_$${CONFIG_SUFFIX}
MOC_DIR = moc_$${CONFIG_SUFFIX}
DESTDIR = lib_$${CONFIG_SUFFIX}
Main.pro 文件:
################# include pri file #################
!include("Main.pri") {
error("Main.pri not found")
}
####################################################
################# override some pri settings #################
TEMPLATE = app
TARGET = MultiFuncTester
CONFIG -= static
QT += core \
gui
##############################################################
################# list used MultiFuncTester libraries #################
MultiFuncTester_COMPONENTS_DIR =../../MultiFuncTester/Components
################################################################
################# list MultiFunTester libraries #################
MultiFunTester_COMPONENTS_DIR =../../MultiFuncTester/Components
MultiFunTester_COMPONENTS = DMM \
SOLAR\
Safety\
Setup
################# own sources #################
INCLUDEPATH += ../../MultiFuncTester/Components \
SOURCES +=../Source/Main.cpp
################# set destination path
DESTDIR = bin_$$CONFIG_SUFFIX
################# edit include path
INCLUDEPATH += $$MultiFunctester_COMPONENTS_DIR \
################# start group
LIBS += -Wl,--start-group \
################# include MultiFunctester libraries and set dependencies
for(TheComponent, MultiFunctester_COMPONENTS) {
THELIBPATH = $$MultiFunctester_DIR/$${TheComponent}/Build/lib_$$CONFIG_SUFFIX
PRE_TARGETDEPS += $$THELIBPATH/lib$${TheComponent}.a
LIBS += $$THELIBPATH/lib$${TheComponent}.a
}
################# end group
LIBS += -Wl,--end-group
每个子目录都有一个 .pro 文件,其中定义了头文件和源文件,还有通用的 multifunctester.pri 文件
请让我知道放置一个通用静态库(MultiFunctester.pri 文件)是一种正确的方法,它应该在代码中做什么......如果不是,请帮助我纠正我的错误。
谢谢
最佳答案
有一些错误:
TEMPLATE = lib
在 MultiFunctester.pri
. .pri 文件就像头文件,这将被添加到每个包含它的 pro 文件中。这可能会造成混淆,因此请避免在 .pri
中使用 TEMPLATE 变量。 Multifunctester.pri
的副本在每个目录中。这也很令人困惑,您应该只有一个(或不同的 pri
文件)。 pro
中使用的配置时文件你会感到痛苦。而是在一个地方声明所有常用设置,而对于变量设置,当它们声明它们时申请。
Multifunctester.pri
包括在任何地方... 您使用
subdirs
当您希望单独构建每个子目录时使用模板(它们可以相互依赖)。例如,当您有一个包含许多可执行文件的框架时,它很有用。看qwt source directory在这种情况下,您使用
TEMPLATE = subdirs
CONFIG += ordered
### They MUST be subdirectories, no ../, and no .pro
SUBDIRS += dir1\
dir2\
...
dirn
除了最后一个级别(您有
TEMPLATE = lib or app
)之外的每个级别。现在,如果你有目录结构,但你想一起构建,你可以创建一个
pri
包含源文件的每个子目录的文件。例如 :在主要
src.pro
你有的文件 include(MultiFunctester.pri) ## for the configurations
include($PATHTOSOLAR/Solar.pri)
include($PATHTODMM/dmm.pri)
include($PATHTOSAFETY/safety.pri)
include($PATHTOSETUP/setup.pri)
include($PATHTOSTART/start.pri)
include($PATHTOMAIN/main.pri)
在哪里
$PATHTO...
是 src.pro
的相对路径目录。现在在每个子目录中都包含源文件。
onesubdir.pri :
headers += /PATHTOTHISSUBDIR/file1.h ## again same relative path as above
....
source +=....
关于qt - Qt 项目中的子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795890/