Qt 彻底搞懂 SUBDIRS 的作用

目录

      • 前言
      • 1、TEMPLATE 介绍
      • 2、SUBDIRS 介绍
        • 2.1 指定子工程目录
        • 2.2 指定子工程的工程文件
        • 2.3 指定子工程的构建顺序
        • 2.4 修改SUBDIRS的默认行为
      • 3、总结

前言

本文主要介绍 qmake 的SUBDIRS变量在多项目工程中的应用。当Qt项目规模比较小的时候,我们用一个工程就可以将所有源码文件组织起来,而不影响编译效率。但是随着项目规模的增加,只用一个工程组织所有的文件就不合适了,这时可以考虑将项目按照功能拆分成多个子工程,而SUBDIRS就是用来将多个子工程组织在一起的qmake变量。

1、TEMPLATE 介绍

每个Qt工程文件中都有一个TEMPLATE变量,Qt通过该变量的值决定如何构建工程。TEMPLATE常用的类型有三种,见下表

选项 描述
app 创建一个用于构建应用程序的Makefile,若一个工程文件没指定TEMPLATE则其默认值为app
lib 创建一个用于构建动态库或静态库的Makefile
subdirs 创建一个用于构建子目录中目标的Makefile。子目录使用SUBDIRS变量进行指定

下面是一个简单的工程文件示例,这个工程表示生成一个动态库,名称为mylib,这个库只有一个main.cpp源文件。

  TEMPLATE = lib
  SOURCES = main.cpp
  TARGET = mylib

2、SUBDIRS 介绍

由上节可知,当TEMPLATE=subdirs 时,变量SUBDIRS用来指定子工程目录的名字或者子工程.pro文件的路径。如果指定的是子工程目录,则每个子目录中必须有一个自己的.pro 工程文件。

2.1 指定子工程目录

下图所示的项目中有4个子工程,其中 myapp为可执行程序工程,其他三个都是动态库工程,myapp 工程依赖其他三个动态库工程。
Qt 彻底搞懂 SUBDIRS 的作用_第1张图片

2.2 指定子工程的工程文件

下图所示是一个指定子工程工程文件的例子。其中 myapp 是子工程目录,该目录下包含一个同名的工程文件,而其他目录下的工程文件与其所在的目录名不同,因此通过指定工程文件的方式将其组织起来。
Qt 彻底搞懂 SUBDIRS 的作用_第2张图片

2.3 指定子工程的构建顺序

如果要求程序按照SUBDIRS指定的子工程顺序来依次构建,则需要更新CONFIG变量,增加ordered选项。如下图所示的项目,在增加了CONFIG += ordered 后构建时会按照controller、model、view、myapp的顺序依次执行。
Qt 彻底搞懂 SUBDIRS 的作用_第3张图片

除了增加ordered选项来指定构建顺序外,还可以通过子目录+ .depends的方式指定构建顺序。如下图所示
Qt 彻底搞懂 SUBDIRS 的作用_第4张图片

2.4 修改SUBDIRS的默认行为

下表是SUBDIRS支持的几个修改项

修改项 描述
.subdir 使用指定的目录来代替SUBDIR中的子工程目录值
.file 指定子工程的工程文件,不能与.subdir 同时使用
.depends 指定子工程依赖的其他子工程
.makefile 指定子工程的Makefile。仅在使用Makefile的平台上可用。
.target 用于指定与此子工程相关的Makefile目标的名称。仅在使用Makefile的平台上可用

下面是一个示例,定义两个子工程目录my_executable 和 my_library,但是都通过.subdir 重新指定了子工程目录,通过.depends指定my_executable依赖my_library

  SUBDIRS += my_executable my_library
  my_executable.subdir = app
  my_executable.depends = my_library
  my_library.subdir = lib

3、总结

本文详细介绍了在多项目组织过程中SUBDIRS变量的作用与使用方法,希望通过阅读本篇能帮助你彻底搞懂SUBDIRS的用法,以上就是本文的所有内容了,有任何问题都可以留言讨论!!

你可能感兴趣的:(C++,qt,开发语言,qtcreator,SUBDIRS,子项目管理)