【问题标题】:Include dependency for multiple static library - qmake包含多个静态库的依赖项 - qmake
【发布时间】:2014-03-16 10:55:24
【问题描述】:

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

我的文件夹结构如下:

--- 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 中的 lib1 标头出现 INCLUDEPATH ?我认为 DEPENDPATHin lib2.pro 会解决这个问题,但显然不是。

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

【问题讨论】:

    标签: static dependencies qmake


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。在顶层目录添加子目录项目后,编译确实很好。但是,是否可以分别编译 lib1,然后是 lib2(具有适当的依赖项和头文件包含到 lib1),然后是应用程序(只有显式的头文件包含和依赖项到 lib2)?我想要的实际上是将库用作独立库并从应用程序中调用它们,而无需额外的 .pro 文件或不必明确指定 app.pro 中包含的 lib1 标头(因为应用程序直接依赖于 lib2 , 但间接在 lib1)
    • 完成我的评论:假设 lib2 被多个应用程序(例如 app 和 app2)使用。我想我必须创建 2 个子目录项目,一个用于 app,另一个用于 app2。但是,库文件 lib2.a 存在两个版本:一个在 app 的 build 目录中,另一个在 app2 的 build 目录中。那么它就不是很干净,是吗?引用同一个 lib2.a 不是更好吗?
    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多