qt creator源码全方面分析(3-5)
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)的更多相关文章
- qt creator源码全方面分析(3-3)
目录 qtcreatordata.pri 定义stripStaticBase替换函数 设置自定义编译和安装 QMAKE_EXTRA_COMPILERS Adding Compilers 示例1 示例2 ...
- qt creator源码全方面分析(0)
本人主攻C++和Qt. 上两天刚研究完Qt install framework(IFW)应用程序安装框架. google没发现有正儿八经的官方文档的翻译,我就进行了翻译哈!! 系列文章具体见:http ...
- qt creator源码全方面分析(4-0)
Qt系统 Qt Creator源码是在Qt对象和框架基础下写的,因此,阅读Qt Creator源码,你首先对Qt得有一定的了解. Qt Core Qt Core特征: The Meta-Object ...
- qt creator源码全方面分析(4-2)
目录 global头文件 global.h xx.h global头文件 插件的本质就是动态链接库,对于库,需要导出符号,供用户导入使用.在qt creator的源码中,存在固定的导入导出模式. gl ...
- qt creator源码全方面分析(4-5)
目录 Qt中的字符串 QLatinString 详细介绍 源码 小结 QStringLiteral(str) 详细介绍 源码 小结 Qt中的字符串 Qt中处理字符串最常用的肯定是QString,但是在 ...
- qt creator源码全方面分析(4-6)
目录 Qt插件基础 Qt插件基础 我们知道Qt Creator源码是基于插件架构的,那么我们先来介绍下插件基础知识. 相关内容如下: How to Create Qt Plugins [ - Defi ...
- qt creator源码全方面分析(3-2)
目录 qtcreator.pri 判断重复包含 定义版本信息 VERSION 定义IDE名称 启用C++14 CONFIG 自定义函数 Replace Functions Test Functions ...
- qt creator源码全方面分析(2-7)
目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...
- qt creator源码全方面分析(2-10-1)
目录 Getting and Building Qt Creator 获取Qt 获取和构建Qt Creator Getting and Building Qt Creator 待办事项:应该对此进行扩 ...
随机推荐
- <JZOJ1329>旅行
贪心大水题 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm& ...
- JAVAscript的DOM操作及实例
一.Windows对象操作 (1)用代码打开窗口:window.open("第一部分","第二部分","第三部分","第四部分&q ...
- 测试一个数字是否等于 NaN
ES6提供了一个新的 Number.isNaN() 函数,这是一个不同的函数,并且比老的全局 isNaN() 函数更可靠.
- 4-CSS规范
4.1 命名规范:4.1.1 css文件命名 reset.css 重置样式,重置元素默认样式,使得页面在所有浏览器中有统一的外观 global.css 全局样式,全站公用,定义页面基础样式(常见的公共 ...
- 纯js文件弹出窗写法
<dialog id="myDialog"> 01234567890 <a href="javascript:;" id="clos ...
- The entity "nbsp" was referenced, but not declared
翻译 实体""被引用,但没有声明 问题 使用xhtmlrenderer将网页转成PDF时报The entity "nbsp" was referenced, b ...
- Ubuntu14.04下GAMIT10.6的安装
#安装步骤将ubuntu切换到root用户权限 1 $sudo -s ##安装必要软件 1 2 3 4 5 $ apt-get install gcc $ apt-get install gfortr ...
- 有关终端的一些tips
reg.exe是用于操作注册表的命令,可以通过reg /?来查看所有参数,在pentest中有两个很实用的参数 reg query 读取注册表信息, reg add 添加或修改注册表内容. 设想如下场 ...
- 微服务SpringBoot总结
什么是SpringBootSpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品官方介绍:Spring Boot makes i ...
- Magisk了解以及简单的模块制作
Magisk,就是刷机经常会需要使用的,也是就是我们说的面具或者脸谱.因为它的logo就是面具或者说脸谱.我们先简单了解一下: XDA上论坛的说明:Magisk - The Universal Sys ...