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

DLLDESTDIR

注意:此变量仅适用于Windows目标。

指定要将目标dll复制到的位置。

DESTDIR

指定放置目标文件的位置。

例如:

DESTDIR = ../../lib

注意:支持的字符列表可能取决于所使用的构建工具。 特别是,括号不适用于make工具。

  1. 根据pro文件名获取对应的依赖文件,进行包含。

    _PRO_FILE_PWD_为包含该pri的pro所在的文件夹路径,([^/]+$)表示路径中最后一个分隔符后面的字符串,\1为反向引用,代表所获取的第1个匹配的引用。

    示例:_PRO_FILE_PWD_为源目录/src/libs/cplusplus,包含文件为源目录/src/libs/cplusplus/cplusplus_dependencies.pri,匹配项为cplusplus。

  2. 设置库文件名。

    示例:CPlusPlus。

  3. 加载qtcreator.pri。

    具体内容见往期文章qt creator源码全方面分析(3-2)

    这里重点提示下,第一步加载的依赖文件中,设置了QTC_LIB_DEPENDS,那么在qtcreator.pri会进行依赖解析(utils库),并进行包含。

  4. 添加预编译头文件。

    示例:源目录/src/shared/qtcreator_pch.h。内容就是一些常用的统一的Qt头文件。

  5. 设置DLL目标文件夹。

    如果win32平台,且生成的目标是dll,则把该dll拷贝到IDE_APP_PATH中,即构建目录/bin。

  6. 设置目标文件夹。

    把生成的目标,输出到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
}
  1. osx设置和rpath.pri,设置编译选项,略。

  2. 设定输出目标的文件名。

    这里调用了qtcreator.pri中定义的qtLibraryTargetName()函数,其实就是在debug模式下添加字符d,以区分release模式。函数分析见qt creator源码全方面分析(3-2)

  3. 设定输出类型,为共享lib库。

  4. 设置隐藏导出符号选项。

  5. 设置安装路径。

结果

在构建目录中,我们在DLLDESTDIR和DESTDIR指定的两处地方找到了编译得到的库。

我们在cplusplus.pro包含qtcreatorlibrary.pri,在pri中加载cplusplus_dependencies.pri,然后加载qtcreator.pri,并在其中解决依赖,最终加载utils_dependencies.pri,项目目录架构结果如下。


原创造福大家,共享改变世界

献出一片爱心,温暖作者心灵


qt creator源码全方面分析(3-5)的更多相关文章

  1. qt creator源码全方面分析(3-3)

    目录 qtcreatordata.pri 定义stripStaticBase替换函数 设置自定义编译和安装 QMAKE_EXTRA_COMPILERS Adding Compilers 示例1 示例2 ...

  2. qt creator源码全方面分析(0)

    本人主攻C++和Qt. 上两天刚研究完Qt install framework(IFW)应用程序安装框架. google没发现有正儿八经的官方文档的翻译,我就进行了翻译哈!! 系列文章具体见:http ...

  3. qt creator源码全方面分析(4-0)

    Qt系统 Qt Creator源码是在Qt对象和框架基础下写的,因此,阅读Qt Creator源码,你首先对Qt得有一定的了解. Qt Core Qt Core特征: The Meta-Object ...

  4. qt creator源码全方面分析(4-2)

    目录 global头文件 global.h xx.h global头文件 插件的本质就是动态链接库,对于库,需要导出符号,供用户导入使用.在qt creator的源码中,存在固定的导入导出模式. gl ...

  5. qt creator源码全方面分析(4-5)

    目录 Qt中的字符串 QLatinString 详细介绍 源码 小结 QStringLiteral(str) 详细介绍 源码 小结 Qt中的字符串 Qt中处理字符串最常用的肯定是QString,但是在 ...

  6. qt creator源码全方面分析(4-6)

    目录 Qt插件基础 Qt插件基础 我们知道Qt Creator源码是基于插件架构的,那么我们先来介绍下插件基础知识. 相关内容如下: How to Create Qt Plugins [ - Defi ...

  7. qt creator源码全方面分析(3-2)

    目录 qtcreator.pri 判断重复包含 定义版本信息 VERSION 定义IDE名称 启用C++14 CONFIG 自定义函数 Replace Functions Test Functions ...

  8. qt creator源码全方面分析(2-7)

    目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...

  9. qt creator源码全方面分析(2-10-1)

    目录 Getting and Building Qt Creator 获取Qt 获取和构建Qt Creator Getting and Building Qt Creator 待办事项:应该对此进行扩 ...

随机推荐

  1. 吴裕雄--天生自然 R语言开发学习:基本图形(续一)

    #---------------------------------------------------------------# # R in Action (2nd ed): Chapter 6 ...

  2. vue基础指令了解补充及组件介绍

    v-once指令 """ v-once:单独使用,限制的标签内容一旦赋值,便不可被动更改(如果是输入框,可以主动修改) """ <di ...

  3. Catch That Cow (BFS)

    题目: Farmer John has been informed of the location of a fugitive cow and wants to catch her immediate ...

  4. 中文字体压缩器-解决css引入的字体太大的问题

    字蛛是一个中文字体压缩器 官方网站:http://font-spider.org/index.html 用于解决页面引入的css字体过大的问题 使用方法: npm i -g font-spider 在 ...

  5. Flask向模板中JS传值简便方式

    后台传值: return render_template('statistics/numberofuserlogin/login_number.html', result_json = json.du ...

  6. Spotlight 监控工具使用

    监控MySQL数据库性能的工具:Spotlight on MySQL    <转载> 我们的服务器数据库:是在windows2003上. 这款工具非常的花哨,界面很漂亮,自带报警. 1.创 ...

  7. Dubbo之心跳机制 · 房东的小黑

    在网络传输中,怎么确保通道连接的可用性是一个很重要的问题,简单的说,在网络通信中有客户端和服务端,一个负责发送请求,一个负责接收请求,在保证连接有效性的背景下,这两个物体扮演了什么角色,心跳机制能有效 ...

  8. nginx增加访问验证

    使用OpenSSL实用程序创建密码文件 如果您的服务器上安装了OpenSSL,则可以创建没有附加软件包的密码文件.我们将在/ etc / nginx配置目录中创建一个名为.htpasswd的隐藏文件来 ...

  9. Thinkpad E40热键不能使用解决办法

    Thinkpad E40 0578M68笔记本电脑安装windows7 64bit和联想官网驱动后,键盘最上面一排热键中,除了静音.减小音量和增大音量之外,其余的热键均不可用,解决办法: 到联想官网下 ...

  10. 人工智能VS投资者:股票市场上谁的胜算更高?

    人工智能研究历史渊源,当人工智能与资本投资,尤其是股票投资相结合或许听起来有些异想天开,但正如科幻作家William Gibson所言:"未来已经到来,只是分布不均." 在股票市场 ...