qtcreatordata.pri

此pri文件用于部署在构建Qt Creator时未编译的文件。如果使用影子构建,它将文件复制到构建目录中,同时添加相应的安装目标。

用法:首先定义变量(详细信息如下),然后包含此pri文件。

STATIC_BASE:STATIC_FILES中列出的文件的基础目录

STATIC_FILES:要部署的文件列表

STATIC_OUTPUT_BASE:编译输出的基础目录

STATIC_INSTALL_BASE:安装输出的基础目录

定义stripStaticBase替换函数

函数如下:

# used in custom compilers which just copy files
defineReplace(stripStaticBase) {
return($$relative_path($$1, $$STATIC_BASE))
}

函数很简单,返回函数参数相对于STATIC_BASE的相对路径。注释也很明白,在仅复制文件的自定义编译器中使用。

设置自定义编译和安装

接下来是

# handle conditional copying based on STATIC_BASE compared to STATIC_OUTPUT_BASE
!isEmpty(STATIC_FILES) {
isEmpty(STATIC_BASE): \
error("Using STATIC_FILES without having STATIC_BASE set")
isEmpty(STATIC_OUTPUT_BASE): \
error("Using STATIC_FILES without having STATIC_OUTPUT_BASE set")
!osx:isEmpty(STATIC_INSTALL_BASE): \
error("Using STATIC_FILES without having STATIC_INSTALL_BASE set") !isEqual(STATIC_BASE, $$STATIC_OUTPUT_BASE) {
copy2build.input += STATIC_FILES
copy2build.output = $$STATIC_OUTPUT_BASE/${QMAKE_FUNC_FILE_IN_stripStaticBase}
isEmpty(vcproj):copy2build.variable_out = PRE_TARGETDEPS
win32:copy2build.commands = $$QMAKE_COPY \"${QMAKE_FILE_IN}\" \"${QMAKE_FILE_OUT}\"
unix:copy2build.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
copy2build.name = COPY ${QMAKE_FILE_IN}
copy2build.config += no_link
QMAKE_EXTRA_COMPILERS += copy2build
} static.files = $$STATIC_FILES
static.base = $$STATIC_BASE
static.path = $$STATIC_INSTALL_BASE
INSTALLS += static
}

QMAKE_EXTRA_COMPILERS

指定额外编译器或预处理器的列表。

另请参阅Adding Compilers

Adding Compilers

可以自定义qmake以支持新的编译器和预处理器:

new_moc.output  = moc_${QMAKE_FILE_BASE}.cpp
new_moc.commands = moc ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
new_moc.depend_command = g++ -E -M ${QMAKE_FILE_NAME} | sed "s,^.*: ,,"
new_moc.input = NEW_HEADERS
QMAKE_EXTRA_COMPILERS += new_moc

根据上述定义,您可以使用moc的直接替代品(如果有)。 该命令执行时,附加在NEW_HEADERS变量中定义的所有参数(来自input成员),并将结果写入output成员定义的文件中。 该文件被添加到项目的其他源文件中。 另外,qmake将执行depend_command来生成依赖信息,并将该信息也放置在项目中。

自定义编译器规范支持以下成员:

不常用,略。

注释说的很明确,基于STATIC_OUTPUT_BASE与STATIC_BASE的不同,处理条件拷贝。

示例1

首先我们来看一个示例,源目录\src\share\qtcreator\data.pro

TEMPLATE = aux

include(../../../qtcreator.pri)

STATIC_BASE = $$PWD
STATIC_OUTPUT_BASE = $$IDE_DATA_PATH
STATIC_INSTALL_BASE = $$INSTALL_DATA_PATH STATIC_FILES = \
$$PWD/externaltools/lrelease.xml \
$$PWD/externaltools/lupdate.xml \
$$PWD/externaltools/qmlviewer.xml \
$$PWD/externaltools/qmlscene.xml
unix {
osx:STATIC_FILES += $$PWD/externaltools/vi_mac.xml
else:STATIC_FILES += $$PWD/externaltools/vi.xml
} else {
STATIC_FILES += $$PWD/externaltools/notepad_win.xml
} include(../../../qtcreatordata.pri)

data.pro首先定义了用法中描述的四个变量,然后调用qtcreatordata.pri。

要部署的文件STATIC_FILES,源目录src/share/qtcreator/externaltools/*

待部署文件的基础目录STATIC_BASE,源目录/src/share/qtcreator

编译输出目录STATIC_OUTPUT_BASE,构建目录/share/qtcreator

安装输出目录STATIC_INSTALL_BASE,安装目录/share/qtcreator

下面分析接着分析qtcreatordata.pri。

  1. 如果四个变量有一个值为空,则退出。
  2. 如果STATIC_BASE与STATIC_OUTPUT_BASE不一样,则自定义编译对象copy2build,指定输入input,输出output,拷贝命令commands,描述name,配置config。
  3. 设置安装集static。

示例2

我们再来看一个示例,源目录\src\share\3rdparty\data.pro

TEMPLATE = aux

include(../../../qtcreator.pri)

STATIC_BASE = $$PWD
STATIC_OUTPUT_BASE = $$IDE_DATA_PATH
STATIC_INSTALL_BASE = $$INSTALL_DATA_PATH DATA_DIRS = \
generic-highlighter \
fonts for(data_dir, DATA_DIRS) {
STATIC_FILES += $$files($$PWD/$$data_dir/*, true)
} include(../../../qtcreatordata.pri)

和上一个类似。

这里大家注意下第一行TEMPLATE = aux,我们在qt creator源码全方面分析(3-1)介绍过,aux的含义是:

创建一个不生成任何内容的Makefile。 如果不需要调用任何编译器来创建目标,请使用此选项;

小节

想必大家也明白了,这个pri的功能,其实就是开头说的,把这些数据/配置文件等复制到构建目录中。


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

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


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

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

    目录 qtcreatorlibrary.pri 使用实例 上半部 下半部 结果 qtcreatorlibrary.pri 上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件 ...

  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. python语法基础-文件操作-长期维护

    ###############    python-简单的文件操作  ############### # python中文件的操作 # 文件操作的基本套路 # 1,打开文件,默认是是只读方式打开文件 ...

  2. CCS|ANSI|中华人民共和国标准化法|国标|ISO|IEC|Ieeexplore|

    国家的标准的有效期,标龄是5年.强制性标准是是指为保障人体的健康.人身.财产安全的标准和法律.行政法规定强制执行的标准,如药品标准.食品卫生标准. CCS:分类法简写图 国际标准,比如美国国家标准AN ...

  3. Mock测试,何去何从

    2016-10-24   出处:Qtest之道  作/译者:闫耀珍   上面的情景是不是似曾相识呢?现今的业务系统已经很少是孤立存在的了,尤其对于一个大公司而言,各个部门之间的配合非常密切,我们或多或 ...

  4. python之os和sys模块的区别

    一.os模块 os模块是Python标准库中提供的与操作系统交互的模块,提供了访问操作系统底层的接口,里面有很多操作系统的函数 1.os常用方法 import os # print(os.getcwd ...

  5. surprise库使用

    自动交叉使用法 #-*- coding:utf-8 -*- from surprise import SVD from surprise import Dataset from surprise.mo ...

  6. python面试--转载

    一, 面的是一家上海的创业公司,地址比较偏远,找了半天,过去的时候还发现他们在搬家,心想,创业公司真不容易啊,什么都要自己来. 期间他问到了我的Python基础知识,我答得支支吾吾,各种不确定,还有被 ...

  7. python与模块的导入方式

    今日所得 模块 import from...import... 循环导入 相对导入 绝对导入 软件开发目录规范 模块 模块:是一系列功能的集合体 模块的三种来源:1.内置模块(Python解释器自带的 ...

  8. git获取公钥和私钥以及常用的命令

    Git简单生成公钥和私钥的方法 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name “用户名” git conf ...

  9. [LC] 165. Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1; if version1 &l ...

  10. Jenkins+jmeter设置定时执行任务

    1.准备好你的jmeter脚本 2.测试命令行下脚本执行 1)cd进入脚本目录 2)dir命令查看该目录下的脚本文件 3)jmeter -n -t test.jmx -l result.jtl  命令 ...