包含多个静态库的依赖项 - qmake

时间:2014-03-16 10:55:24

标签: static dependencies qmake

我无法弄清楚qmake如何处理依赖于另一个静态库的静态库的include依赖项。

我的文件夹结构如下:

--- src/
lib1/
    src/ (.pro,*.h,*.cpp)
lib2/
    src/ (.pro,*.h,*.cpp)
app/
    src/ (.pro,*.h,*.cpp)
--- build/
lib1/
    lib1.a
lib2/
    lib2.a
app/
    app

lib2使用lib1,app使用lib2。 .pro文件是:

lib1.pro

TARGET = lib1
TEMPLATE = lib
CONFIG += staticlib
CONFIG += create_prl link_prl
SOURCES += ...
HEADERS += ...

lib2.pro

TARGET = lib2
TEMPLATE = lib
CONFIG += staticlib
CONFIG += create_prl link_prl

INCLUDEPATH += $${_PRO_FILE_PWD_}/../../lib1/src
DEPENDPATH += $${_PRO_FILE_PWD_}/../../lib1/src
PRE_TARGETDEPS += $${OUT_PWD}/../lib1/liblib1.a
LIBS += -L$${OUT_PWD}/../lib1 -llib1

SOURCES += ...
HEADERS += ...

app.pro

TARGET = app
TEMPLATE = app
CONFIG += link_prl

# Include to lib1 headers ... How to avoid this ?
INCLUDEPATH += $${_PRO_FILE_PWD_}/../../lib1/src
DEPENDPATH += $${_PRO_FILE_PWD_}/../../lib1/src

# lib2
INCLUDEPATH += $${_PRO_FILE_PWD_}/../../lib2/src
DEPENDPATH +=$${_PRO_FILE_PWD_}/../../lib2/src
PRE_TARGETDEPS += $${OUT_PWD}/../lib2/liblib2.a
LIBS += -L$${OUT_PWD}/../lib2 -llib2

SOURCES += ...
HEADERS += ...

有没有办法避免app.pro中的INCLUDEPATH到lib1标头?我认为lib2.pro中的DEPENDPATH会处理这个问题,但显然不是。

编辑:澄清问题: 问题来自lib2.h,其中包含:#include "lib1.h"。如果我没有在app.pro中包含lib1头文件,那么我会收到一个编译错误,指出找不到lib1.h。这是正常的吗?不确定这是否有意义,但由于app仅明确依赖于lib2,它是否应该只能包含lib2头文件进行编译?

1 个答案:

答案 0 :(得分:0)

听起来您需要在顶级目录中使用相应的“.depends”语句进行QMake SUBDIRS项目。查看the first answer to "How to Use QMake's SUBDIRS TemplateQMake Project Dependencies