继续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

参考

  • http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake

  • http://qt.nokia.com/doc/qmake-project-files.html

qmake 乱乱乱谈(四)相关推荐

  1. 多麦克风做拾音的波束_乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评...

    原标题:乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 20 ...

  2. 鸿蒙系统几年不卡,华为手机别乱选,这四款机型基本三年不卡,并且可以升级鸿蒙系统...

    原标题:华为手机别乱选,这四款机型基本三年不卡,并且可以升级鸿蒙系统 华为手机现在的人气已经变得高涨起来,再过不久,就能看到华为手机的绝版旗舰机,也就是华为Mate40系列.这种情况下已经有很多手机用 ...

  3. 移动式护栏巡逻机器人_重磅!移动式护栏巡逻执法机器人上岗!专盯高速乱停乱行!...

    在高速公路上行车 因为速度很快 所以千万不能乱停乱行 搞不好就让你万箭穿心 针对各种高速违法行为 又一执法神器上线 移动式护栏巡逻执法机器人 眼前这个小盒子,正是这款"移动式护栏巡逻执法机器 ...

  4. 对共享单车乱停乱放说不:首个电子围栏技术要求发布

    每次走出小区或者地铁,看到路边乱停乱放甚至是堆成小山似的共享单车,您是否也会和我一样发出一声叹息? 幸运的是,随着全国首个共享单车电子围栏技术要求的发布,这一乱象有望得到有效整治. 2018年3月22 ...

  5. 共享单车用完乱停乱放怎么办?“电子围栏” 来帮忙

    共享单车给市民带来便利的同时,乱停乱放却成了非常难以解决的问题.针对这种情况,上海市率先与小鸣单车合作,在晋元路上设置了国内首个针对共享单车的"电子围栏". 共享单车给市民带来便利 ...

  6. 计算机屏幕画面乱动如何解决,电脑屏幕不受控制乱跳怎么回事 电脑屏幕乱闪乱跳的处理方法...

    在当今的互联网时代,电脑设备已经算是比较普遍了,在使用过程中难免遇到一点小问题.有些网友留言说自己新电脑屏幕经常出现闪烁或者跳动的情况,出现此问题可能是显卡故障,有的时候纯粹是设置问题.不管什么原因, ...

  7. 机动车乱停乱放检测系统(源码&部署教程)

    1.识别效果展示 2.视频演示 [YOLOv7]基于YOLOv7的机动车乱停乱放检测系统(源码&部署教程)_哔哩哔哩_bilibili 3.YOLOv7算法简介 YOLOv7 在 5 FPS ...

  8. android 换行乱_浅谈Android textview文字对齐换行的问题

    今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下. 经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下 ...

  9. 【乱】乱,乱,乱,android真乱!

    从手机商到运营商,从软件公司到平台网站,人人都做Android. 品牌手机几千元,山寨产品几百元; 操作系统你改一版,我改一版; 软件商店你出一个,我出一个--产品繁复无尽,应用层出不穷,市场混乱不堪 ...

最新文章

  1. Proxy与NAT有什么区别
  2. Ardino基础教程 9_数字电压表
  3. domino子表单html,使用Domino表单构建Web页面.ppt
  4. Git 笔记 上传文件至github
  5. python如何只保留数字_雷军透露小米或只保留数字、MIX和CC系列 官宣视频首度曝光小米CC...
  6. stateflow中终止节点小记
  7. BugKuCTF 杂项 又一张图片,还单纯吗
  8. 乙级(Basic Level) 1010 月饼
  9. platform 设备驱动实验
  10. 2021年春季学期期末统一考试 西方经济学(本) 试题
  11. Mantle For iOS
  12. 计算机专业新手博客,本博客的标题不是“当初学者学习编程语言的时候在学什么?”...
  13. 【bzoj1036】 ZJOI2008—树的统计Count
  14. python中filter用法_filter用法--Python
  15. 安卓recovery如何传递启动参数
  16. 黑马程序员--安卓22期毕业19天就业50人平均薪资8261
  17. php 查找同义词,php – 同义词查找器算法
  18. vscode json插件
  19. mysql repeated read_mysql事务之可重复读(Repeated Read)
  20. YOLOV3预选框验证

热门文章

  1. 99%的人将沦为无用阶层,你会是那1%吗
  2. 九阳真经(1-5重)
  3. 《生活的经济解释》精髓:台湾大学经济系教授熊秉元是如何用经济学的眼光看生活的?
  4. 2018年C刊投稿指南
  5. 2022实验室更新 DBCO-NH2,DBCO-Amine 叠氮化物功能化化合物
  6. 应急物资配送小程序的设计与实现
  7. 计算机信息技术应用教学设计,信息技术应用 用计算机画函数图象优秀教学设计...
  8. WEB 报表如何做到不需要预览就直接打印
  9. 接入层网络用于讲家庭用户计算机,根据寄生虫的方法,计算机病毒分为引导区型病毒,文件型病毒和寄生虫病毒...
  10. 如何编写一个功能完善的HTTP服务器