Qt项目中的子目录

Qt项目中的子目录,qt,qt-creator,qmake,subdirectory,Qt,Qt Creator,Qmake,Subdirectory,我正在寻找一种使用QMake组织项目结构的方法。我找到了子目录模板,但我很难理解它。我试过做类似的事情。谁能告诉我我是对的还是错的 编辑:我已经读了下面的帖子,但我仍然被卡住了 我的项目结构如下: MultiFuncTester.pro - DMM (DMM.cpp, DMM.h and Multifunctester.pri) -Safety (Safety.cpp, Safety.h and Multifunctester.pri) -Solar (Solar.cpp,

我正在寻找一种使用QMake组织项目结构的方法。我找到了
子目录
模板,但我很难理解它。我试过做类似的事情。谁能告诉我我是对的还是错的

编辑:我已经读了下面的帖子,但我仍然被卡住了

我的项目结构如下:

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文件)是一种正确的方法,它在代码中应该做什么……如果没有,请帮助我纠正我的错误


谢谢

有一些错误:

  • MultiFunctester.pri
    中的
    TEMPLATE=lib
    。pri文件类似于头文件,它将添加到包含它的每个pro文件中。这可能会造成混淆,因此请避免在
    .pri
  • 如果我很理解您的第一点,您在每个目录中都有
    Multifunctester.pri
    的副本。这也是非常令人困惑的,您应该只有一个(或不同的
    pri
    文件)
  • 覆盖以前的设置并不像看上去那样是个好主意。当您必须调试以查看每个
    pro
    文件中使用的配置时,您会感到痛苦。而是在一个地方声明所有公共设置,对于变量设置,则在它们出现时声明它们 申请
  • 我看不到任何地方包含
    Multifunctester.pri
当您希望单独构建每个子目录(它们可以相互依赖)时,可以使用
子目录
模板。例如,当您有一个包含许多可执行文件的框架时,它非常有用。看

在本例中,您使用

TEMPLATE = subdirs
CONFIG  += ordered

### They MUST be subdirectories, no ../, and no .pro
SUBDIRS +=  dir1\
            dir2\
            ...
            dirn
对于上一个级别之外的每个级别(您有
TEMPLATE=lib或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:


每个子目录中都有pro文件吗?如果是这样的话,为什么?是的,在每个子目录中,我都有自己的pro文件,其中说明了什么是目标,什么是源,包括,表单和资源。你看过这个问题中链接的帖子了吗?实际上,我发布的这段代码运行良好。简单的hello world很容易显示。但是当我尝试使用某个目录中的任何函数时,比如说start…我得到了错误,未定义引用start…我main.o和start.o没有正确链接…我不知道为什么?那么它运行不正常。。。。看看qwt。这是继续的标准方法..如果我在子目录中定义目录时不使用.pro,我如何为每个子目录获取不同的文件夹我也在windows平台上的qt creator上尝试了这些步骤,但仍然得到相同的错误
 headers += /PATHTOTHISSUBDIR/file1.h ## again same relative path as above
       ....
 source +=....