在 Qt 中使用不同的模板构建目标
Build targets with different templates in Qt
您好,我对 Qt 比较陌生,到目前为止我找不到可行的解决方案。我有以下项目结构
ALPHA-app
alpha.pro
ALPHA-Desktop
alpha-desktop.pro
ALPHA-Shared
alpha-shared.pro
ALPHA-Common
alpha-common.pro
ALPHA-Tests
alpha-tests.pro
我基本上必须 运行 alpha.pro 构建所有项目并创建可执行文件
alpha.pro,
TEMPLATE = subdirs
DESTDIR = .
SUBDIRS += \
ALPHA-Common \
ALPHA-Shared \
ALPHA-Desktop \
ALPHA-Tests
ALPHA-Desktop.depends = ALPHA-Common
ALPHA-Shared.depends = ALPHA-Common
ALPHA-Tests.depends = ALPHA-Common
ALPHA-Tests.depends = ALPHA-Desktop
将成为 运行 的主要可执行文件存在于 ALPHA-Desktop 项目中(如下所示)
TARGET = ALPHA #this is in ALPHA-Deskop.pro
TEMPLATE = app
现在我创建了 ALPHA-Tests 来制作一个 运行 单元测试的项目。它依赖于 ALPHA-Desktop(因此我在 ALPHA 项目中写了 .depends 语句)
为了 运行 ALPHA-Tests,我需要创建一个 ALPHA-Desktop 文件夹的静态库。因此,我在 ALPHA-Desktop.pro 文件
中写了以下几行
TARGET = ALPHA-Desktop #section 1
TEMPLATE = lib #section 1
CONFIG += staticlib #section 1
TARGET = ALPHA #section 2
TEMPLATE = app #section 2
当我 运行 ALPHA.pro 文件时,未创建 ALPHA-Desktop 库。仅创建 ALPHA 可执行文件。如果我交换位置(即,将第 2 节放在第 1 节上方),则只会创建 libALPHA-Desktop.a 文件,而不会创建可执行文件。
我该如何解决这个问题? (我在 ubuntu 15.10 上使用 qmake 3.0 版,Qt 5.4.2 版)
TEMPLATE、TARGET 等对于一个 .pro 文件始终是全局的。虽然这从未在 qmake documentation 中明确说明,但一旦您意识到 qmake 语法的目标是声明性的,这一点就很明显了。最后一行设置变量将始终为准(除非您通过命令行覆盖变量)。
如果你想创建一个静态库和一个可执行文件,你需要有两个 .pro 文件(可能再次与子目录 .pro 文件集成)。
请注意,这并不一定意味着您需要不同的子目录,因为多个 .pro 文件也可以存在于同一目录中:
阿尔法-Desktop.pro:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += ALPHA-Desktop-staticlib.pro ALPHA-Desktop-app.pro
ALPHA-桌面-staticlib.pro:
TEMPLATE = lib
CONFIG += static
# ...
ALPHA-桌面-app.pro:
TEMPLATE = app
# ...
您好,我对 Qt 比较陌生,到目前为止我找不到可行的解决方案。我有以下项目结构
ALPHA-app
alpha.pro
ALPHA-Desktop
alpha-desktop.pro
ALPHA-Shared
alpha-shared.pro
ALPHA-Common
alpha-common.pro
ALPHA-Tests
alpha-tests.pro
我基本上必须 运行 alpha.pro 构建所有项目并创建可执行文件
alpha.pro,
TEMPLATE = subdirs
DESTDIR = .
SUBDIRS += \
ALPHA-Common \
ALPHA-Shared \
ALPHA-Desktop \
ALPHA-Tests
ALPHA-Desktop.depends = ALPHA-Common
ALPHA-Shared.depends = ALPHA-Common
ALPHA-Tests.depends = ALPHA-Common
ALPHA-Tests.depends = ALPHA-Desktop
将成为 运行 的主要可执行文件存在于 ALPHA-Desktop 项目中(如下所示)
TARGET = ALPHA #this is in ALPHA-Deskop.pro
TEMPLATE = app
现在我创建了 ALPHA-Tests 来制作一个 运行 单元测试的项目。它依赖于 ALPHA-Desktop(因此我在 ALPHA 项目中写了 .depends 语句)
为了 运行 ALPHA-Tests,我需要创建一个 ALPHA-Desktop 文件夹的静态库。因此,我在 ALPHA-Desktop.pro 文件
中写了以下几行TARGET = ALPHA-Desktop #section 1
TEMPLATE = lib #section 1
CONFIG += staticlib #section 1
TARGET = ALPHA #section 2
TEMPLATE = app #section 2
当我 运行 ALPHA.pro 文件时,未创建 ALPHA-Desktop 库。仅创建 ALPHA 可执行文件。如果我交换位置(即,将第 2 节放在第 1 节上方),则只会创建 libALPHA-Desktop.a 文件,而不会创建可执行文件。
我该如何解决这个问题? (我在 ubuntu 15.10 上使用 qmake 3.0 版,Qt 5.4.2 版)
TEMPLATE、TARGET 等对于一个 .pro 文件始终是全局的。虽然这从未在 qmake documentation 中明确说明,但一旦您意识到 qmake 语法的目标是声明性的,这一点就很明显了。最后一行设置变量将始终为准(除非您通过命令行覆盖变量)。
如果你想创建一个静态库和一个可执行文件,你需要有两个 .pro 文件(可能再次与子目录 .pro 文件集成)。
请注意,这并不一定意味着您需要不同的子目录,因为多个 .pro 文件也可以存在于同一目录中:
阿尔法-Desktop.pro:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += ALPHA-Desktop-staticlib.pro ALPHA-Desktop-app.pro
ALPHA-桌面-staticlib.pro:
TEMPLATE = lib
CONFIG += static
# ...
ALPHA-桌面-app.pro:
TEMPLATE = app
# ...