如何在Qt中添加主项目依赖的子项目?

如何在Qt中添加主项目依赖的子项目?,qt,Qt,我正在构建一个具有以下目录结构的QT项目,其中我的所有主要应用程序源和头都位于顶级目录中,但我也有一个带有自己的QT.pro文件的共享库: main_app_directory ├── main_app.pro ├── main_app.cpp └── my_library ├── my_library.pro ├── library_file.h ├── library_file.cpp └── libli

我正在构建一个具有以下目录结构的QT项目,其中我的所有主要应用程序源和头都位于顶级目录中,但我也有一个带有自己的QT.pro文件的共享库:

main_app_directory
    ├── main_app.pro
    ├── main_app.cpp
    └── my_library
        ├── my_library.pro
        ├── library_file.h
        ├── library_file.cpp
        └── liblibrary_file.so
我的目标是能够在
main_app
目录中运行
make
,并在构建
main_app.cpp
之前在
My_library
目录中运行
make
。我知道可以在项目文件中指定
SUBDIRS
变量,但我可能必须更改目录结构。如果可能的话,我宁愿保持目录结构不变。还有别的办法吗

以下是我的项目文件:

main_app.pro

TARGET = main_app
TEMPLATE = app
SOURCES = main_app.cpp

LIBS += -Lmy_library -lmy_library
INCLUDEPATH += my_library
TEMPLATE = lib
TARGET = library_file

HEADERS += my_library.h
SOURCES += my_library.cpp
my_library.pro

TARGET = main_app
TEMPLATE = app
SOURCES = main_app.cpp

LIBS += -Lmy_library -lmy_library
INCLUDEPATH += my_library
TEMPLATE = lib
TARGET = library_file

HEADERS += my_library.h
SOURCES += my_library.cpp

我不知道如何使用实际的目录结构。但是你可以做一点小小的改变:把你的“main_应用程序”放在一个子目录中,就像你在库中做的那样

然后您将能够在根目录中运行qmake/make(在我的示例中为“test_应用程序”)

解决方案#1:具有“有序”属性:

正如eyllanesc所解释的,您可以使用“ordered”属性并编写文件“test_application.pro”:

qmake将按照“SUBDIRS”中定义的顺序构建“test_应用程序”。所以你的“库”将在“主应用”之前建立

解决方案#2:具有“依赖”属性:

但是,我建议您在文件“test_application.pro”中使用更灵活的属性:“depends”:

无论“SUBDIRS”顺序如何,qmake都将找到构建所有子项目的正确顺序。它在具有更多子项目和更多依赖项的更复杂项目中非常有用

在某些情况下,它还可以减少编译时间,因为某些项目将并行构建


更多信息请参见:

您有两个项目,您希望先编译一个,然后再编译另一个,正如您所指出的,解决方案是使用
TEMPLATE=subdirs
CONFIG+=ordered
来指示编译顺序。另一种可能的解决方案是在main_app中创建一个在编译之前执行的命令,以便它编译我的_库,但我看到了更乏味的路径。@eyllanesc据我所知,前者需要我将
main_app.cpp
main_app.pro
放在另一个目录中,对吗?如何在项目文件中指定命令?不,您必须创建另一个.pro,在其中添加其他项目,例如,您可以参考以下示例:如果您可以像对“我的库”所做的那样,将“主应用程序”放入子文件夹项目中subdir项目:应该在root.pro文件中使用
depends
属性。类似这样的东西
main\u app.dependens=my\u library
。因此,您将能够在根目录中执行
make
,这将在应用程序之前构建您的库。更多信息请点击此处:
TEMPLATE = subdirs

SUBDIRS += \
    library \
    main_app

main_app.depends = library