gpt4 book ai didi

c++ - 在 Qt 中使用不同的模板构建目标

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:09 25 4
gpt4 key购买 nike

您好,我是 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 来构建所有项目并创建可执行文件

阿尔法.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 文件也可以存在于同一目录中:

ALPHA-Desktop.pro:

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += ALPHA-Desktop-staticlib.pro ALPHA-Desktop-app.pro

ALPHA-Desktop-staticlib.pro:

TEMPLATE = lib
CONFIG += static
# ...

ALPHA-Desktop-app.pro:

TEMPLATE = app
# ...

关于c++ - 在 Qt 中使用不同的模板构建目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36089788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com