内容简介:上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件都介绍一遍。首先为qtcreatorlibrary.pri。为了分析这个文件,我们找个使用该pri的例子,源目录\src\libs\cplusplus\cplusplus.pro以及依赖项,源目录\src\libs\cplusplus\cplusplus_dependencies.pri
qtcreatorlibrary.pri
上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件都介绍一遍。首先为qtcreatorlibrary.pri。
使用实例
为了分析这个文件,我们找个使用该pri的例子,源目录\src\libs\cplusplus\cplusplus.pro
DEFINES += NDEBUG unix:QMAKE_CXXFLAGS_DEBUG += -O2 win32:QMAKE_CXXFLAGS_DEBUG += -O2 include(../../qtcreatorlibrary.pri) include(cplusplus-lib.pri)
以及依赖项,源目录\src\libs\cplusplus\cplusplus_dependencies.pri
QTC_LIB_NAME = CPlusPlus QTC_LIB_DEPENDS += \ utils INCLUDEPATH *= $$IDE_SOURCE_TREE/src/libs/3rdparty
这里我们可以看见,设置了库名QTC_LIB_NAME和依赖的库名QTC_LIB_DEPENDS,这在qtcreator.pri中解析依赖时会用到的。
上半部
下面,我们来分析qtcreatorlibrary.pri,这里分为两部分来介绍。
上半部分如下
include($$replace(_PRO_FILE_PWD_, ([^/]+$), \\1/\\1_dependencies.pri)) TARGET = $$QTC_LIB_NAME include(../qtcreator.pri) # use precompiled header for libraries by default isEmpty(PRECOMPILED_HEADER):PRECOMPILED_HEADER = $$PWD/shared/qtcreator_pch.h win32 { DLLDESTDIR = $$IDE_APP_PATH } DESTDIR = $$IDE_LIBRARY_PATH
注意:此变量仅适用于Windows目标。
指定要将目标dll复制到的位置。
指定放置目标文件的位置。
例如:
DESTDIR = ../../lib
注意:支持的字符列表可能取决于所使用的构建工具。 特别是,括号不适用于make工具。
-
根据pro文件名获取对应的依赖文件,进行包含。
_PRO_FILE_PWD_为包含该pri的pro所在的文件夹路径,([^/]+$)表示路径中最后一个分隔符后面的字符串,\1为反向引用,代表所获取的第1个匹配的引用。
示例:_PRO_FILE_PWD_为源目录/src/libs/cplusplus,包含文件为源目录/src/libs/cplusplus/cplusplus_dependencies.pri,匹配项为cplusplus。
-
设置库文件名。
示例:CPlusPlus。
-
加载qtcreator.pri。
具体内容见往期文章 qt creator源码全方面分析(3-2) 。
这里重点提示下,第一步加载的依赖文件中,设置了QTC_LIB_DEPENDS,那么在qtcreator.pri会进行依赖解析(utils库),并进行包含。
-
添加预编译头文件。
示例:源目录/src/shared/qtcreator_pch.h。内容就是一些常用的统一的Qt头文件。
-
设置DLL目标文件夹。
如果win32平台,且生成的目标是dll,则把该dll拷贝到IDE_APP_PATH中,即构建目录/bin。
-
设置目标文件夹。
把生成的目标,输出到IDE_LIBRARY_PATH,即构建目录/lib/qtcreator。
下半部
下半部分如下
osx { QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/Frameworks/ QMAKE_LFLAGS += -compatibility_version $$QTCREATOR_COMPAT_VERSION } include(rpath.pri) TARGET = $$qtLibraryTargetName($$TARGET) TEMPLATE = lib CONFIG += shared dll contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols win32 { dlltarget.path = $$INSTALL_BIN_PATH INSTALLS += dlltarget } else { target.path = $$INSTALL_LIBRARY_PATH INSTALLS += target }
-
osx设置和rpath.pri,设置编译选项,略。
-
设定输出目标的文件名。
这里调用了qtcreator.pri中定义的qtLibraryTargetName()函数,其实就是在debug模式下添加字符d,以区分release模式。函数分析见 qt creator源码全方面分析(3-2) 。
-
设定输出类型,为共享lib库。
-
设置隐藏导出符号选项。
-
设置安装路径。
结果
在构建目录中,我们在DLLDESTDIR和DESTDIR指定的两处地方找到了编译得到的库。
我们在cplusplus.pro包含qtcreatorlibrary.pri,在pri中加载cplusplus_dependencies.pri,然后加载qtcreator.pri,并在其中解决依赖,最终加载utils_dependencies.pri,项目目录架构结果如下。
原创造福大家,共享改变世界
献出一片爱心,温暖作者心灵
以上所述就是小编给大家介绍的《qt creator源码全方面分析(3-5)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 大数据方面核心技术有哪些?
- 推荐一些学习方面的公众号
- 滴滴开源 移动开发 方面的 4 个项目
- 产品小白进行产品验收,从这些方面入手
- android常见的性能优化方面的总结
- 良好的RPC接口设计,需要注意这些方面
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Bad Blood
John Carreyrou / Knopf / 2018-5-21 / USD 27.95
The full inside story of the breathtaking rise and shocking collapse of Theranos, the multibillion-dollar biotech startup, by the prize-winning journalist who first broke the story and pursued it to t......一起来看看 《Bad Blood》 这本书的介绍吧!