一、添加新的配置特性

特性(features)是 *.prf 文件中自定义函数和定义的集合(Qt安装目录\mkspecs\features 中有很多 *.prf文件)。

存放特性文件的目录有很多地方,qmake 在查找 .prf 文件时会按以下顺序检查每个目录:

  • QMAKEFEATURES 环境变量中列出的目录中,
  • QMAKEFEATURES 属性变量中列出的目录中。
  • 在位于 mkspecs 目录中的 features 目录中。
  • QMAKESPEC 环境变量提供的目录下的 features 目录中。
  • 在 data_install/mkspecs 目录中的 features 目录中。
  • 在作为 QMAKSPEC 环境变量指定的目录的同级存在的 features 目录中。

然后在以下子目录中搜索功能文件:

  • features/unix、features/win32、features/macx,取决于使用的平台
  • features/

例如以下配置:

 CONFIG += myfeatures

添加到 CONFIG 变量后,qmake 将在完成解析项目文件后搜索上面列出的位置以查找 myfeatures.prf 文件。在 Unix 系统上将查找以下文件:

  • $QMAKEFEATURES/myfeatures.prf
  • $$QMAKEFEATURES/myfeatures.prf
  • myfeatures.prf(在项目的根目录中)。项目根由顶级 *.pro 文件确定。
  • $QMAKEPATH/mkspecs/features/unix/myfeatures.prf 、$QMAKEPATH/mkspecs/features/myfeatures.prf
  • $QMAKESPEC/features/unix/myfeatures.prf、
    $QMAKESPEC/features/myfeatures.prf
  • data_install/mkspecs/features/unix/myfeatures.prf 和 data_install/mkspecs/features/myfeatures.prf
  • $QMAKESPEC/../features/unix/myfeatures.prf、
    $QMAKESPEC/../features/myfeatures.prf

注意:*.prf 文件的名称必须为小写。

二、安装文件

在 Unix 上经常使用构建工具来安装应用程序和库,例如通过调用 make install。qmake 有一个安装集的概念。例如,可以通过以下方式描述文档文件的集合:

 documentation.path = /usr/local/program/docdocumentation.files = docs/*
  • path成员:通知qmake文件应该安装在/usr/local/program/doc
  • files成员:指定应该复制到安装目录的文件。这里 docs 目录中的所有内容都将复制到 /usr/local/program/doc。

然后将其附加到安装列表中:

 INSTALLS += documentation

qmake 将确保将指定的文件复制到安装目录。

如果将内置安装集附加到 INSTALLS 变量并且不指定文件或额外成员,qmake 将决定需要复制的内容。当前,支持 targetdlltarget 这两个内置安装集。例如:

 target.path = /usr/local/myprogramINSTALLS += target

在上面两行中,qmake 知道需要复制什么,并会自动处理安装过程。

三、添加自定义目标

qmake 尝试做跨平台构建工具所期望的一切。当确实需要运行特殊的平台相关命令时,可通过自定义目标实现。

例如:

 mytarget.target = .buildfilemytarget.commands = touch $$mytarget.targetmytarget.depends = mytarget2mytarget2.commands = @echo "假装生成了mytarget2"

1、定义qmake要生成的名为 mytarget 的目标

2、mytarget 是名为 .buildfile 的 Makefile 文件,该目标由 touch 命令生成(Linux touch命令),即运行 mytarget.commands 指定的命令

3、mytarget 依赖于 mytarget2,即mytarget2生成之后才能生成mytarget,即运行 mytarget2.commands 指定的命令

4、最后一步是使用 QMAKE_EXTRA_TARGETS 变量来指示 qmake 这个对象是要构建的目标:

 QMAKE_EXTRA_TARGETS += mytarget mytarget2

这就是实际构建自定义目标所需要做的全部工作。

可能希望将这些目标绑定到 qmake 构建目标。只需将 Makefile 目标包含在 PRE_TARGETDEPS 列表中。

自定义目标规范支持以下成员:

  • commands:用于生成自定义构建目标的命令。
  • CONFIG:自定义构建目标的特定配置选项。
  • depends:自定义构建目标所依赖的现有构建目标。
  • recurse:指定在 Makefile 中创建规则以调用子目标特定的 Makefile 时应使用哪些子目标。
  • recurse_target:指定应通过子目标 Makefile 为 Makefile 中的规则构建的目标。
  • target:自定义构建目标的名称。

四、库依赖

通常在链接库时,qmake 依赖于底层平台来了解该库链接到哪些其他库,并让平台将它们拉入。然而,在许多情况下,这还不够。 例如,在静态链接库时,不会链接其他库,因此不会创建对这些库的依赖项。如果明确启用跟踪,qmake 会在适当的情况下尝试跟踪库的依赖项。

第一步是在库本身中启用依赖项跟踪。必须告诉 qmake 保存有关库的信息:

 CONFIG += create_prl

这仅适用于 lib 模板类型的工程,所有其他模板将被忽略。 启用此选项后,qmake 将创建一个以 .prl 结尾的文件,该文件将保存有关库的一些元信息。这个元文件就像一个普通的项目文件,但只包含内部变量声明。安装库时,通过在 INSTALLS 声明中将其指定为目标,qmake 会自动将 .prl 文件复制到安装路径。

第二步是在使用静态库的应用程序中启用此元信息的读取:

 CONFIG += link_prl

启用此功能后,qmake 将处理应用程序链接的所有库并找到它们的元信息。qmake 将使用它来确定相关的链接信息,特别是将值添加到应用程序项目文件的 DEFINESLIBS 列表中。 一旦 qmake 处理了这个文件,它就会查看 LIBS 变量中新引入的库,并找到它们依赖的 .prl 文件,直到所有库都被解析为止。此时,Makefile 照常创建,并且库与应用程序显式链接。

.prl 文件应仅由 qmake 创建,不应在操作系统之间传输,因为它们可能包含平台相关信息。

qmake:高级用法相关推荐

  1. vim的高级用法配置以及在系统中如何获取帮助

    vim的高级用法配置以及在系统中如何获取帮助 1 vim的三种模式 1.1 使用方法 1.2 vim模式 2 vim工作的基本配置 2.1 临时设定(set设定) 2.2 永久设定方式 3 搜索 4 ...

  2. Cacti Weathermap 高级用法 (二)

    成都长宽Weathermap实际运用的效果图示例: 这是一个CNC出口的质量监控图. 途中cnc节点(红色)是一个展示图例,TEL节点根据存活状态显示为绿色 TEL节点上面P:47.2ms 是一个,这 ...

  3. JAVA正则表达式高级用法(分组与捕获)

    2019独角兽企业重金招聘Python工程师标准>>> 正则表达式在字符串处理中经常使用,关于正则简单的用法相信有一点程序基础的人都懂得一些,这里就不介绍简单基础了.这里主要讲解一下 ...

  4. GUN sed高级用法,sed脚本编写

    这里举一些sed常用的高级用法例子经供参考: 一下操作都针对file.txt文件作修改 [root@QX-××× ~]# cat file.txt libgcc-4.4.7-4.el6.x86_64 ...

  5. java return用法_Java枚举的高级用法之多键值的映射使用

    枚举Enum单映射使用 做Java的各位仁兄姐妹都知道,Java通过HashMap,以及枚举提供了方便的K-V映射功能,例如 枚举单映射使用 但是如果遇到多个键值映射,例如K-K-V的形式怎么办呢?可 ...

  6. (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案

    (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案 参考文章: (1)(转)python requests 高级用法 -- 包括SSL 证书错误的解决方案 (2)ht ...

  7. Python 内置函数sorted()在高级用法

    对于Python内置函数sorted(),先拿来跟list(列表)中的成员函数list.sort()进行下对比.在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的. ...

  8. class() 高级用法 -- lua

    class() 高级用法 class() 除了定义纯 Lua 类之外,还可以从 C++ 对象继承类.比如需要创建一个工具栏,并在添加按钮时自动排列已有的按钮,那么我们可以使用如下的代码:-- 从 CC ...

  9. Newtonsoft.Json高级用法

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  10. Python进阶:切片的误区与高级用法

    众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组...)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice)就是一种截取索引片段的技术,借助切片 ...

最新文章

  1. 学了python能干啥-python都可以做什么用
  2. 普通函数与函数模板的区别
  3. 【JETSON-NANO】SD卡系统备份克隆
  4. MUI主界面菜单同时移动主体部分不出滚动条解决
  5. android 固定底部 布局_Android系统列表控件
  6. 《python网络数据采集》读后感 第六章:读取文档
  7. 如何优化网站页面提高网页的加载速度
  8. 【原】Coursera—Andrew Ng机器学习—Week 9 习题—异常检测
  9. 2016.05.17开通自己的博客
  10. Paul Graham:未来的互联网创业[转]
  11. 一、RAID磁盘阵列介绍
  12. 手机用USB连接电脑宽带上网(只需轻松3步即可上网)
  13. win10专业版本激活
  14. 2021ACA世界大赛中国赛区完美收官,创意设计收获百万级关注
  15. 影响力 读后感 书评
  16. obs推流视频比特率_我如何使用OBS和WebSockets流视频
  17. 考研英语复习五大计划表
  18. 【数据结构与算法】之深入解析“航班预订统计”的求解思路与算法示例
  19. 2013 网易校园招聘试题考点
  20. 基于计算机视觉的Android手机摄像头实现长度测量

热门文章

  1. 3137102334_卓文翔_实验5
  2. 金三银四跳槽的正确姿势你掌握了么?
  3. python adb模块,python + adb 实现控制手机,,主要步骤:1、USB
  4. 12123选牌漏洞_交管12123自编选号攻略,12123自主选号成功技巧
  5. 企业网站产品页面优化技巧
  6. Gradle learn
  7. web前端之html图片操作详解从零开始(三)----img标签
  8. 梅尔频率倒谱系数MFCC总结
  9. Vijos 1404 遭遇战 - 动态规划 - 线段树 - 最短路 - 堆
  10. 计算机论文基础与发展实践报告,大学生计算机基础论文摘要_计算机实践基础论文3000_计算机论文3000字...