亲宝软件园·资讯

展开

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

codeForFamily 人气:1
[TOC] # 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](https:/https://img.qb5200.com/download-x/doc.qt.io/qt-5/qmake-variable-reference.html#qmake-extra-compilers) > 指定额外编译器或预处理器的列表。 > > 另请参阅[Adding Compilers](https:/https://img.qb5200.com/download-x/doc.qt.io/qt-5/qmake-advanced-usage.html#adding-compilers)。 ### [Adding Compilers](https:/https://img.qb5200.com/download-x/doc.qt.io/qt-5/qmake-advanced-usage.html#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)](https://www.cnblogs.com/codeForFamily/p/qt-creator-ide-source-learn-3-1.html)介绍过,aux的含义是: > 创建一个不生成任何内容的Makefile。 如果不需要调用任何编译器来创建目标,请使用此选项; ## 小节 想必大家也明白了,这个pri的功能,其实就是开头说的,把这些数据/配置文件等复制到构建目录中。 ------ **`原创造福大家,共享改变世界`** **`献出一片爱心,温暖作者心灵`** ------

加载全部内容

相关教程
猜你喜欢
用户评论