如何在Qt中添加主项目依赖的子项目?
我正在构建一个具有以下目录结构的QT项目,其中我的所有主要应用程序源和头都位于顶级目录中,但我也有一个带有自己的QT.pro文件的共享库:如何在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
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