在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 测试来创建一个运行单元测试的项目。它取决于 ALPHA-Desktop(因此我在 ALPHA 项目中编写了 .depends 语句)
要运行 ALPHA 测试,我需要创建 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 桌面库。仅创建 ALPHA 可执行文件。如果我交换位置(即将第 2 节放在第 1 节上方),则仅创建 libALPHA-Desktop.a 文件,而不会创建可执行文件。
我该如何解决这个问题?(我在 ubuntu 15.10 上使用 qmake 版本 3.0、Qt 版本 5.4.2)
TEMPLATE、TARGET 等对于一个 .pro 文件始终是全局的。虽然这在 qmake 文档中从未明确说明,但一旦您意识到 qmake 语法旨在实现声明性,这一点就很明显了。设置变量的最后一行将始终优先(除非您通过命令行覆盖变量)。
如果要创建静态库和可执行文件,则需要两个 .pro 文件(可能再次与 subdirs .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
# ...
- 如何让KDevelop & CMake只构建特定目标?
- 指定 NDK 构建的目标架构
- 在多个目标上 CMake 后期构建自定义命令?
- 在QT中的大型项目中指定构建/目标/安装路径
- 在构建 Android 应用程序时禁用 CMake 目标
- CMake 将目标作为项目的一部分独立构建
- Cmake:如何构建自定义编译器二进制文件,然后将其用于某些目标?
- 当许多目标使用相同的C 源时,如何加快介子的构建
- 如何配置要使用默认的HTML包装器构建的Emscripten目标
- 致命错误LNK1112:通过 vcvarsall .bat x86 运行构建'X86'模块计算机类型'x64'与目标计算机类型冲突
- 如何只构建一个依赖项目标
- 制定目标需要32和64位的DLL构建
- Microsoft Visual Studio 2010 没有将构建工具放在 PATH 中以实现干净的目标?
- Scons VisualStudio,多个构建目标生成重复的NMakeOutput标签
- boost构建中的多个构建目标
- 在Qt中使用不同的模板构建目标
- Visual Studio C/C++ 中的多个构建目标
- EclipseCDT-带有现有代码的新Makefile项目-更改全局默认构建目标
- 由于错误条件,构建目标被跳过;("@(条件名称此处)" - 不确定如何更改
- Cmake /ctest:是否可以使用创建的构建目标作为测试