您好我对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)
答案 0 :(得分: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
# ...