qmake 乱乱乱谈(四)
继续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 乱乱乱谈(四)相关推荐
- 多麦克风做拾音的波束_乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评...
原标题:乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 20 ...
- 鸿蒙系统几年不卡,华为手机别乱选,这四款机型基本三年不卡,并且可以升级鸿蒙系统...
原标题:华为手机别乱选,这四款机型基本三年不卡,并且可以升级鸿蒙系统 华为手机现在的人气已经变得高涨起来,再过不久,就能看到华为手机的绝版旗舰机,也就是华为Mate40系列.这种情况下已经有很多手机用 ...
- 移动式护栏巡逻机器人_重磅!移动式护栏巡逻执法机器人上岗!专盯高速乱停乱行!...
在高速公路上行车 因为速度很快 所以千万不能乱停乱行 搞不好就让你万箭穿心 针对各种高速违法行为 又一执法神器上线 移动式护栏巡逻执法机器人 眼前这个小盒子,正是这款"移动式护栏巡逻执法机器 ...
- 对共享单车乱停乱放说不:首个电子围栏技术要求发布
每次走出小区或者地铁,看到路边乱停乱放甚至是堆成小山似的共享单车,您是否也会和我一样发出一声叹息? 幸运的是,随着全国首个共享单车电子围栏技术要求的发布,这一乱象有望得到有效整治. 2018年3月22 ...
- 共享单车用完乱停乱放怎么办?“电子围栏” 来帮忙
共享单车给市民带来便利的同时,乱停乱放却成了非常难以解决的问题.针对这种情况,上海市率先与小鸣单车合作,在晋元路上设置了国内首个针对共享单车的"电子围栏". 共享单车给市民带来便利 ...
- 计算机屏幕画面乱动如何解决,电脑屏幕不受控制乱跳怎么回事 电脑屏幕乱闪乱跳的处理方法...
在当今的互联网时代,电脑设备已经算是比较普遍了,在使用过程中难免遇到一点小问题.有些网友留言说自己新电脑屏幕经常出现闪烁或者跳动的情况,出现此问题可能是显卡故障,有的时候纯粹是设置问题.不管什么原因, ...
- 机动车乱停乱放检测系统(源码&部署教程)
1.识别效果展示 2.视频演示 [YOLOv7]基于YOLOv7的机动车乱停乱放检测系统(源码&部署教程)_哔哩哔哩_bilibili 3.YOLOv7算法简介 YOLOv7 在 5 FPS ...
- android 换行乱_浅谈Android textview文字对齐换行的问题
今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下. 经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下 ...
- 【乱】乱,乱,乱,android真乱!
从手机商到运营商,从软件公司到平台网站,人人都做Android. 品牌手机几千元,山寨产品几百元; 操作系统你改一版,我改一版; 软件商店你出一个,我出一个--产品繁复无尽,应用层出不穷,市场混乱不堪 ...
最新文章
- Proxy与NAT有什么区别
- Ardino基础教程 9_数字电压表
- domino子表单html,使用Domino表单构建Web页面.ppt
- Git 笔记 上传文件至github
- python如何只保留数字_雷军透露小米或只保留数字、MIX和CC系列 官宣视频首度曝光小米CC...
- stateflow中终止节点小记
- BugKuCTF 杂项 又一张图片,还单纯吗
- 乙级(Basic Level) 1010 月饼
- platform 设备驱动实验
- 2021年春季学期期末统一考试 西方经济学(本) 试题
- Mantle For iOS
- 计算机专业新手博客,本博客的标题不是“当初学者学习编程语言的时候在学什么?”...
- 【bzoj1036】 ZJOI2008—树的统计Count
- python中filter用法_filter用法--Python
- 安卓recovery如何传递启动参数
- 黑马程序员--安卓22期毕业19天就业50人平均薪资8261
- php 查找同义词,php – 同义词查找器算法
- vscode json插件
- mysql repeated read_mysql事务之可重复读(Repeated Read)
- YOLOV3预选框验证
热门文章
- 99%的人将沦为无用阶层,你会是那1%吗
- 九阳真经(1-5重)
- 《生活的经济解释》精髓:台湾大学经济系教授熊秉元是如何用经济学的眼光看生活的?
- 2018年C刊投稿指南
- 2022实验室更新 DBCO-NH2,DBCO-Amine 叠氮化物功能化化合物
- 应急物资配送小程序的设计与实现
- 计算机信息技术应用教学设计,信息技术应用 用计算机画函数图象优秀教学设计...
- WEB 报表如何做到不需要预览就直接打印
- 接入层网络用于讲家庭用户计算机,根据寄生虫的方法,计算机病毒分为引导区型病毒,文件型病毒和寄生虫病毒...
- 如何编写一个功能完善的HTTP服务器