`
tomhibolu
  • 浏览: 1431585 次
文章分类
社区版块
存档分类
最新评论

qmake 乱乱乱谈(四)

 
阅读更多

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

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

Manual

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

  • Creates a Makefile containing rules for the subdirectories specified using theSUBDIRSvariable. 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

参考


分享到:
评论

相关推荐

    qmake转换cmake工具

    QT项目,C++,该工具是windows环境下的工具,将QT的工程项目文件.pro,转换成CMakeLists.txt,也就是说将qmake转换成cmake,使用方法,解压缩后,打开 Windows PowerShell ,进入到解压缩后的目录,再使用命令 ...

    qmake转cmake写法

    `qmake`是Qt框架提供的一个构建工具,主要用于管理Qt项目的编译过程。然而,随着C++和软件工程的发展,`cmake`逐渐成为更通用、跨平台的构建系统,能够支持多种编译器和项目结构。本篇文章将详细介绍如何将Qt项目的`...

    Makefile及Qmake详解

    在软件开发过程中,Makefile和qmake是两个重要的构建工具,尤其在C/C++编程领域。它们用于自动化编译、链接和其他构建过程,确保代码能够高效地被组织和管理。 **1. Makefile** Makefile是Unix/Linux系统下的一种...

    qmake使用手册.pdf

    qmake使用手册 qmake是Trolltech公司创建的用于生成Makefile的工具,可以根据不同的平台和编译器书写Makefile。使用qmake,开发者可以创建一个简单的项目文件,并且运行qmake生成适合的Makefile。qmake会注意所有的...

    qmake可执行文件

    这个是单独的qmake.exe工具,如果不想安装qt的相关的包仅仅想使用QT creator。

    QMake指南(高级技巧)

    #### 四、快速上手QMake 1. **创建项目文件**:QMake的核心在于.pro文件,这是一个文本文件,其中包含了构建应用程序所需的所有信息。以下是一个简单的示例: ```plaintext SOURCES = hello.cpp HEADERS = ...

    QT4 qmake 手册

    从给定的文件信息来看,主要关注的是QT4中的qmake手册,这涉及到Qt框架的构建工具qmake的使用和理解。以下是对标题、描述、标签以及部分内容中提及的知识点的详细解读: ### QT4 qmake 手册 **qmake**是Qt提供的一...

    qmake.conf 文件

    Qt5.14.2交叉编译配套qmake.conf文件

    qmake使用指南

    #### 四、qmake的优势与局限 - **优势**:跨平台支持,简化编译步骤,集成Qt工具链,易于学习。 - **局限**:虽然强大,但灵活性不如手工编写的Makefile,对于复杂项目可能需要更细致的配置。 通过深入理解qmake的...

    qt-qmake找不到的解决办法1

    在使用Qt开发环境时,有时会遇到`qmake`找不到的问题。这通常是因为系统路径设置不正确,或者Qt的安装路径未被系统识别。本文将详细介绍如何解决`qmake`找不到的问题。 首先,当在终端输入`qmake -v`时,如果出现`...

    qmake用户手册3.05中文版

    qmake的介绍 qmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。 手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake,开发者创建一个...

    qxmpp通信协议源码 qmake版本

    QXMPP库是一个用C++编写的轻量级、易于使用的XMPP框架,它与Qt库紧密结合,利用qmake构建系统,方便在Qt环境中开发XMPP应用。这个源码包特别提到了使用qmake版本,意味着它适用于那些已经安装了Qt和Visual Studio...

    qmake 使用详解

    ### qmake 使用详解 #### 一、简介与安装 **qmake** 是 Trolltech 公司开发的一款自动化生成 Makefile 的工具,适用于多种平台和编译器。它简化了跨平台项目的构建流程,使得开发者能够专注于编写代码而非管理构建...

    qmake及QTCreator的使用教程

    在软件开发领域,Qt是一个非常流行的跨平台应用程序开发框架,而qmake和Qt Creator是Qt开发环境中的两个重要工具。本教程将深入探讨这两个工具的使用,帮助开发者更好地理解和利用它们进行高效开发。 **qmake简介**...

    qmake 手册 (初级部分 )

    #### 四、高级用法 ##### 4.1 添加特定平台的源文件 有时,我们需要为不同的平台添加特定的源文件。这可以通过条件语句实现: ```plaintext SOURCES += main.cpp win32: SOURCES += windows_specific.cpp macx: ...

    qmake用户手册

    qmake用户手册,感兴趣的朋友,可以下载看看,不需要资源分

    qmake 使用技巧

    **QMake 使用技巧详解** QMake 是 Qt 开发框架中的一个重要工具,用于自动化构建过程,帮助开发者生成项目文件,使得构建应用程序变得更加简单。本篇将深入探讨 QMake 的使用技巧和常见问题的解决方法。 ### 1. **...

    qmake用户手册 qmake用户手册.pdf

    #### 四、使用qmake创建项目 1. **创建项目文件**: - **项目文件**(.pro 文件)用于定义项目的各种属性,包括源文件、头文件、配置选项等。 - 示例项目文件: ```plaintext SOURCES = hello.cpp HEADERS = ...

    QT Qmake ;............

    QT和Qmake是Qt框架中的两个重要组成部分,用于软件开发。Qt是一个跨平台的应用程序开发框架,支持多种操作系统,如Windows、Linux、macOS等。它提供了丰富的图形用户界面(GUI)工具包,使得开发者可以方便地创建出...

    qmake连接第三方库SDL

    ### 如何使用qmake连接第三方库SDL 在开发过程中,我们常常需要利用各种第三方库来扩展项目的功能。其中,SDL(Simple DirectMedia Layer)库是一个跨平台的多媒体库,广泛应用于游戏开发等领域,用于处理图形、...

Global site tag (gtag.js) - Google Analytics