如何在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
└── liblibrary_file.so

我的目标是能够在main_app目录中运行make,并在构建main_app.cpp之前让它在my_library目录中make运行。 我知道可以在项目文件中指定SUBDIRS变量,但我可能必须更改目录结构。 如果可能的话,我宁愿保持目录结构不变。 有没有其他方法可以做到这一点?

以下是我的项目文件:

main_app.专业

TARGET = main_app
TEMPLATE = app
SOURCES = main_app.cpp
LIBS += -Lmy_library -lmy_library
INCLUDEPATH += my_library

my_library.pro

TEMPLATE = lib
TARGET = library_file
HEADERS += my_library.h
SOURCES += my_library.cpp

我不知道如何使用您的实际目录结构来做到这一点。但是你可以通过一些改变来做到这一点:把你的"main_app"放在一个子目录中,就像你对库所做的那样。

然后,您将能够在根目录中运行qmake/make(在我的示例中为"test_application"(。

test_application
├── test_application.pro
├── main_app
│     └── main_app.pro
└── library
└── library.pro

解决方案#1:使用"有序"属性:

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

TEMPLATE = subdirs
SUBDIRS += 
library 
main_app
CONFIG += ordered

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

解决方案#2:使用"依赖"属性:

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

TEMPLATE = subdirs
SUBDIRS += 
library 
main_app
main_app.depends = library

无论"SUBDIRS"顺序如何,qmake都会单独找到正确的顺序来构建您的所有子项目。它在具有更多子项目和更多依赖项的更复杂的项目中很有用。

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

更多信息在这里: https://wiki.qt.io/SUBDIRS_-_handling_dependencies

最新更新