我正在构建具有以下目录结构的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
答案 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都会单独找到构建所有子项目的正确顺序。在具有更多子项目和更多依赖项的更复杂项目中很有用。
在某些情况下,由于某些项目将以并行方式构建,因此还可以减少编译时间。