我的共享库项目结构如下:
library.pro:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += libs plugins test_programs
...
QT += concurrent
...
# Those files contains pure interfaces (C++ abstract classes)
# with no implementation, and some helper classes with inline implementation.
# So there is no reason to create yet another subproject for them
HEADERS += iface/IInterface1.h \
iface/IInterface2.h \ # IInterface2 needs QtConcurrent
...
IInterface2.h:
...
#include <QtConcurrent> // ERROR HERE: file not found, i.e. qmake ignores
// "QT += concurrent" statement in library.pro
class MyHelperExc : public QtConcurrent::Exception
{ ... }
class IInterface2: public virtual IBaseInterface
{ ... }
所以,我的问题是:qmake只是忽略SUBDIRS
父项目中的变量操作。
但它在子项目中运行正常。
我做错了什么?
答案 0 :(得分:1)
TEMPLATE = subdirs
这一行表示library.pro只是其他项目的容器,包含在SUBDIRS
变量中列出的子目录中。除了CONFIG += ordered
之外,library.pro中的大多数其他变量都被忽略,它指定子目录应按给定顺序进行处理。
包含IInterface2.h的子项目都需要在其.pro文件中包含QT += concurrent
。
答案 1 :(得分:0)
我做错了什么?
你认为qmake会解析的事实,然而这并不是qmake目前的工作方式。 SUBDIRS意味着它只会查看子文件夹。