qmake 乱乱乱谈(四)

2023-10-29

继续qmake,本文主题:低调的 TEMPLATE = subdirs

非常非常常用的一个东西,可是manual中却介绍的很少,太低调了。在编写包含多可执行文件、库、插件 的程序时,一直不敢相信subdirs的能力,以至于曾一度想转到cmake之下。

Manual

Manual 中对 TEMPLATE = subdirs 的介绍实在简单:

  • Creates a Makefile containing rules for the subdirectories specified using the SUBDIRS variable. Each subdirectory must contain its own project file.

相当长一段时间,自己都是按Manual中的说法进行使用的:

  • 工程的一般结构

|-- project.pro
      |-- app\
      |     `-- app.pro
      |-- lib1\
      |     `-- lib1.pro
      |-- lib2\
      |     `-- lib2.pro
      `-- tests\
            |-- tests.pro
            |-- test1\
            |     `-- test1.pro
            |-- test2\
                  `-- test2.pro
  • project.pro 的内容

TEMPLATE  = subdirs
SUBDIRS = lib1 lib2 app tests
  • tests/tests.pro 的内容

TEMPLATE  = subdirs 
SUBDIRS = test1 test2

一切看起来都很自然。subdirs,顾名思义,SUBDIRS 中指定的就是一个个的子目录呗。真是如此么?

.file

SUBDIRS 中指定的是一个个的子目录来理解,很快有个问题:

每个子目录下的工程文件必须和子目录同名!可是,万一不同名又如何解决呢??

  • 比如:

|-- project.pro
      |-- app\
      |     `-- hello.pro
      |-- lib1\
      |     `-- libwidget.pro
      `-- lib2\
            `-- libtools.pro

恩,这时就该 .file 出场了!

  • project.pro 内容

TEMPLATE  = subdirs
SUBDIRS = lib1 lib2 app
app.file = hello.pro
lib1.file = lib1/libwidget.pro
lib2.file = lib2/libtools.pro

恩,直到这时,SUBDIRS 中指定的还都是目录名,仍然没什么问题。可是,在看到.file不久,就发现了.subdir

.subdir

这个东西实在不好理解了,比如,下面的结构:

|-- project.pro
      |-- app\
      |     `-- app.pro
      `-- lib1\
            `-- lib1.pro
  • project.pro 内容可以写作如下:

TEMPLATE  = subdirs
SUBDIRS = my_lib1 my_app
my_lib1.subdir = lib1
my_app.subdir = app

这样一来,SUBDIRS 后面的东西,完全不是目录名了,而是任意一个名字!

.file 与 .subdir

有了上面两个之后,容易想到的就是:?

  • 取一个名字,加入到 SUBDIRS
  • 通过.subdir 给它指定子目录名字
  • 通过.file 给它指定pro工程的名字

比如:

|-- project.pro
      |-- app\
      |     `-- hello.pro
      `-- lib1\
            `-- lib1.pro

project.pro是否可以这么写呢?

TEMPLATE  = subdirs
SUBDIRS = lib1 my_app
my_app.subdir = app
my_app.file = app/hello.pro

可是,这么却不会工作。不能同时指定 .subdir 和 .file!那怎么办呢?

  • 去掉 .file? 显然不行,它需要 app 目录下有 app.pro 文件
  • 去掉 .subdir呢?试试看

TEMPLATE  = subdirs
SUBDIRS = lib1 my_app
my_app.file = app/hello.pro

啊?还真可以了!

怎么回事?现在不光 SUBDIRS 后面指定的不是目录,后面也不需要 .subdir 来指定目录了。

看来,SUBDIRS是严重的名不副实了!

故事还没完

还是这个例子:

|-- project.pro
      |-- app\
      |     `-- hello.pro
      `-- lib1\
            `-- lib1.pro
  • project.pro 可以直接写作

TEMPLATE  = subdirs
SUBDIRS = lib1 app/hello.pro

我们可以直接指定pro工程名!

继续?

恩,不需要每个目录都用一个pro文件

|-- project.pro
      |-- app\
      |     `-- app.pro
      |-- lib1\
      |     `-- lib1.pro
      |-- lib2\
      |     `-- lib2.pro
      `-- tests\
            |-- test1\
            |     `-- test1.pro
            |-- test2\
                  `-- test2.pro
  • project.pro 文件内容

TEMPLATE  = subdirs
SUBDIRS = app lib1 lib2 tests/test1 tests/test2/test2.pro

恩,这样似乎又回归简单了。只需简单指定目录或pro文件路径即可。

少点什么?

恩,下面5个之中,我们只提到了2个(最后2个本人没用到过,也不清楚具体用途)

  • subdir
  • file
  • depends
  • makefile
  • target

不过中间的depends还是很有用的

TEMPLATE  = subdirs
SUBDIRS = app lib1 lib2
app.depends = lib1 lib2

参考



from:http://blog.csdn.net/dbzhang800/article/details/6765117


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qmake 乱乱乱谈(四) 的相关文章

随机推荐

  • 设计模式浅析-适配器模式

    前言 2017年悄悄的来了 无声无息的以至于我都还没好好缅怀一下荒诞的2016 不得不说 2016没能通过努力达到应该有的程度 看样子目标还是要有的 那就先设定一个小目标吧 设计模式 当你学会了设计模式 就要忘记设计模式 辉哥 适配器模式
  • 华为手机隐藏指令的5个代码

    第一个 拨号键输入 6130 这个指令主要用于查看手机当前的网络信号 手机基本信息以及手机的使用情况数据的统计 尤其是手机使用情况统计数据 可以查看当前手机上次使用了哪些应用 使用的具体时间以及使用的时长 第二个 拨号键输入 2846579
  • MySQL 数据库存储引擎

    目录 一 存储引擎简介 二 MyISAM存储引擎 1 MylSAM介绍 2 MyISAM表支持3种不同的存储格式 3 MylSAM的特点 4 MyISAM使用的生产场景 三 InnoDB存储引擎 1 InnoDB介绍 2 InnoDB的特点
  • ubuntu18.04下pass-through直通realteck PCI设备到qemu-kvm虚拟机实践

    设备直通是一种虚拟化资源分配方式 通过将物理设备直通给虚拟机环境 达到虚拟机可以直接访问物理设备的目的 直通功能对设备的要求不高 不需要设备支持PF VF 目前市面上的显卡 网卡一般都支持直通 典型场景比如有两块显卡 一块主机用 另一块虚拟
  • 前端如何实现浏览器适配?

    1 根据window screen width获取当前浏览器的宽度 然后根据宽度加载不同的样式文件 注意 这里的script一定要写在head标签里面 这样在加载页面的之前 会先把css文件加载出来 2 媒体查询 根据设备显示器的特性为其设
  • python 根据索引取值_Python 从列表中取值和取索引的方法

    如下所示 name list zhangsan lisi wangwu 1 取值 print name list 0 print name list 1 print name list 2 2 取索引 print name list ind
  • 北京市经济和信息化局:鼓励布局区块链算力中心

    近日 北京市经济和信息化局印发 北京市数据中心统筹发展实施方案 2021 2023年 的通知 方案提出 鼓励布局人工智能 区块链算力中心 推动形成 4000PFlops 即每秒 4 百亿亿次浮点运算 总算力规模的人工智能公共算力基础设施 重
  • GEN 自动生成 GORM 模型结构体文件及使用示例

    GEN 自动生成 GORM 模型结构体文件及使用示例 背景 GEN 是一个基于 GORM 的安全 ORM 框架 由字节跳动无恒实验室与 GORM 作者联合研发 主要功能说白了就是帮助生成数据表对应的模型文件和更安全方便地执行SQL 直接使用
  • 短链服务架构实践

    1 存储采用REDIS做数据存储 2 id keyword gt long url hset key long url id keyword long url 3 md5 long url gt id keyword hset key sh
  • 队列的实际应用和操作(顺序表)

    题目 利用队列求解报数问题 设有n个人站成一排 从左向右的编号分别为1 n 现在从左往右报数 1 2 1 2 数到 1 的人出列 数到 2 的立即站到队伍的最右端 报数过程反复进行 直到n个人都出列为止 要求给出他们的出列顺序 头文件SqQ
  • 内附源码!使用Python和requests库轻松爬取全国高校排名

    目录 前言 代码实现 总结 前言 中国的大学排名数据比较分散 一些权威机构会发布综合排名 如教育部的 双一流 985 211 计划 还有一些机构会发布专业排名等 因此 具体爬取哪些排名数据可能需要根据实际需要来进行筛选 代码实现 导入req
  • C++ final关键字

    1 禁用继承 C 11中允许将类标记为final 方法时直接在类名称后面使用关键字final 如此 意味着继承该类会导致编译错误 实例如下 class Super final 2 禁用重写 C 中还允许将方法标记为fianal 这意味着无法
  • (小白教学) 用Node.js+Mysql+Express从0搭建实现简单的登录注册

    Node js Express MySql实现用户登录注册 开发工具 vscode git postman 工程目录 数据库表 node搭建过程 首先创建一个为空文件夹server 打开git 初始化一个package json包 npm
  • PointNet学习笔记(一)—— 论文

    PointNet学习笔记 一 论文 本文记录了博主在学习 PointNet Deep Learning on Point Sets for 3D Clasification and Segmentation 过程中的总结笔记 更新于2019
  • linux grpc c++编译安装

    环境信息 1 操作系统 centos7 4 2 g 版本 4 8 5 grpc v1 29 1 版本 源码下载 因为国内现在访问github速度很慢 这里用了代理镜像 git clone b v1 29 1 https hub xn gzu
  • 安装打印机时LPT,COM、USB端口区别

    LPT 并口 LPT是用于使用打印机或其它设备的 LPT并口是一种增强了的双向并行传输接口 在USB接口出现以前是扫描仪 打印机最常用的接口 目前使用滴少 COM 串口 COM端口通常用于连接鼠标及通讯设备 如连接外置式MODEM进行数据通
  • 内网进行spring-boot开发时Jar包依赖的解决

    1 简介 使用Spring Boot可以轻松的创建独立运行的程序 非常容易构建独立的服务组件 是实现分布式架构 微服务架构的利器 Spring Boot简化了第三方包的引用 通过提供的starter 简化了依赖包的配置 1 1 Spring
  • Cisco Packet Tracer配置操作的三种命令模式

    Cisco Packet Tracer三种基本命令模式 这里我们需要讲一下三种命令模式 今后绝大部分操作都通过命令实现 所以需要熟悉命令模式 在路由器命令配置界面中演示 三种命令模式介绍 用户模式 用户模式下可进行的操作较少 我们一般不在用
  • kubeadm init三个master节点遇到的问题

    要创建三个master节点 就不能使用其中一台主机的IP 所以申请了一个VIP地址 kubeadm init apiserver advertise address 0 0 0 0 image repository k8s gcr io c
  • qmake 乱乱乱谈(四)

    继续qmake 本文主题 低调的 TEMPLATE subdirs 非常非常常用的一个东西 可是manual中却介绍的很少 太低调了 在编写包含多可执行文件 库 插件 的程序时 一直不敢相信subdirs的能力 以至于曾一度想转到cmake