我无法弄清楚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头文件进行编译?
答案 0 :(得分:0)
听起来您需要在顶级目录中使用相应的“.depends”语句进行QMake SUBDIRS项目。查看the first answer to "How to Use QMake's SUBDIRS Template和QMake Project Dependencies。