标签:empty name har win32 工作流 ons 数据 ref dir
我们在前面已经讨论了所有的项目文件,
下面我们再从头到尾来捋一遍。
我们可以看到,所有的*.pro文件中,除了最底层的子项目。都采用TEMPLATE和SUBDIRS这种模式,来进行多个子项目包含和分层,以及指定编译顺序。
# qtcreator.pro
TEMPLATE = subdirs
SUBDIRS = src share
# src.pro
TEMPLATE = subdirs
SUBDIRS += libs app plugins tools ...
# libs.pro
TEMPLATE = subdirs
SUBDIRS = aggregation extensionsystem utils ...
从上往下形成多级目录层次。
我们还是以源目录\src\plugins\cppeditor为例。其解析流程如下:
include(../../qtcreatorplugin.pri)
在qtcreatorplugin.pri加载cppeditor_dependencies.pri。在该文件中设置了自身插件名和附加依赖项。
QTC_PLUGIN_NAME = CppEditor
QTC_LIB_DEPENDS += extensionsystem utils cplusplus
QTC_PLUGIN_DEPENDS += texteditor coreplugin cpptools projectexplorer
QTC_TEST_DEPENDS += qmakeprojectmanager
现在就有了QTC_PLUGIN_NAME,QTC_LIB_DEPENDS和QTC_PLUGIN_DEPENDS的值。
紧接着在qtcreatorplugin.pri加载qtcreator.pri。该文件中使用定义的for(ever)和步骤3中获取的变量,进行递归依赖解析。
最终从上往下也形成多级目录层次。
源目录\src\libs中的各个子项目同上。
这里,我们统一分析下INCLUDEPATH,LIBS和DESTDIR。
# qtcreatorplugin.pri
# 为了加载插件元数据json文件
INCLUDEPATH += $$OUT_PWD
# qtcreator.pri
# 包含多个目录
INCLUDEPATH += $$IDE_BUILD_TREE/src # 用于包含app/app_version.h
$$IDE_SOURCE_TREE/src
$$IDE_SOURCE_TREE/src/libs $$IDE_SOURCE_TREE/tools
# 至少包含src/plugins目录
QTC_PLUGIN_DIRS += $$IDE_SOURCE_TREE/src/plugins
for(dir, QTC_PLUGIN_DIRS) {
INCLUDEPATH += $$dir
}
# 至少包含src/libs目录
QTC_LIB_DIRS += $$IDE_SOURCE_TREE/src/libs
for(dir, QTC_LIB_DIRS) {
INCLUDEPATH += $$dir
}
我们现在可以知道,对于每一个使用qtcreator.pri的子项目,都包含
这样包含以后,引用头文件的时候,只需要直接包含"dependproject/xx.h",不用管"../../.."这种模式,把自己搞晕呼了,也容易出错。
# qtcreatorplugin.pri
# 依赖插件也输出到同一个目录,所有链接到该目录,注意是大写-L
LIBS += -L$$DESTDIR
# qtcreator.pri
# 注意是大写-L
LIBS *= -L$$IDE_LIBRARY_PATH
!isEmpty(QTC_PLUGIN_DEPENDS) {
LIBS *= -L$$IDE_PLUGIN_PATH
}
# 注意是小写-l,连接依赖的指定库文件
for(ever) {
LIBS += -l$$qtLibraryName($$QTC_PLUGIN_NAME)
}
for(ever) {
LIBS += -l$$qtLibraryName($$QTC_LIB_NAME)
}
我们现在可以知道,对于每一个使用qtcreator.pri的子项目
直接解决了libs和plugins目录下的项目的依赖问题。
# qtcreatorplugin.pri
# 注意,还有一个用户路径,这里不展示了
DESTDIR = $$IDE_PLUGIN_PATH
# qtcreatorlibrary.pri
# 输出到两个路径
win32 {
DLLDESTDIR = $$IDE_APP_PATH
}
DESTDIR = $$IDE_LIBRARY_PATH
# qtcreatortool.pri
DESTDIR = $$IDE_LIBEXEC_PATH
我们现在可以知道,
我们结合上一小节,再总结一下输出目录的架构,这也是在qtcreator.pri中指定的。
构建目录如下:
现在我们可知,程序需要的东西至少为:
正式QtCreator安装目录如下:
原创造福大家,共享改变世界
献出一片爱心,温暖作者心灵
标签:empty name har win32 工作流 ons 数据 ref dir
原文地址:https://www.cnblogs.com/codeForFamily/p/qt-creator-ide-source-learn-3-8.html