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

时间:2018-10-18 20:49:55

标签: 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

我的目标是能够在构建make之前在main_app目录中运行make,并使其在my_library目录中运行main_app.cpp。我知道在那里可以在项目文件中指定SUBDIRS变量,但是我可能不得不更改目录结构。如果可能的话,我宁愿保持目录结构不变。还有另一种方法吗?

下面是我的项目文件:

main_app.pro

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

1 个答案:

答案 0 :(得分:0)

我不知道如何使用您的实际目录结构。但是您可以做一些改动:将“ main_app”放在子目录中,就像对库所做的那样。

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

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”。因此,您的“库”将在“ main-app”之前构建。

解决方案2:具有“ depends”属性:

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

TEMPLATE = subdirs

SUBDIRS += \
    library \
    main_app

main_app.depends = library

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

在某些情况下,由于某些项目将以并行方式构建,因此还可以减少编译时间。

此处有更多信息:https://wiki.qt.io/SUBDIRS_-_handling_dependencies