Qt 外部库包括内部自定义库
Posted
技术标签:
【中文标题】Qt 外部库包括内部自定义库【英文标题】:Qt external libraries include inside custom library 【发布时间】:2014-11-05 14:52:51 【问题描述】:我有一个如下所示的 Qt 项目:
myLib/
myLib.pro
(some *.h, *.cpp)
myProject/
myProject.pro
(some *.h, *.cpp)
myLib.pro 包含一些使用 INCLUDEPATH +=
和 LIBS +=
的外部库(例如 Eigen)
myProject 依赖于 myLib,因此我使用 Qt 向导添加了依赖项,该向导添加到 myProject.pro 中,如下所示:
unix|win32: LIBS += -L$$OUT_PWD/../myLib/ -lmyLib
INCLUDEPATH += $$PWD/../myLib
DEPENDPATH += $$PWD/../myLib
问题是当我编译它工作的库时,但是当我尝试编译项目时,我得到了类似的错误
Eigen/Core: No such file or directory
因为在我的项目的源文件中,我包含了一些来自我自己的库的头文件,其中包括来自外部库的一些头文件。
我知道解决此问题的唯一解决方案是将所有包含和链接从 myLib.pro 复制/粘贴到 myProject.pro。有没有更好的方法来做到这一点? 我在想也许每个外部库都有一个 *.pri,并将这些 *.pri 包含在两个 *.pro 中。但这并不完全令人满意。
编辑: 我忘了说 myLib 是一个共享库
【问题讨论】:
【参考方案1】:我要检查的第一件事是您在 myProject 中确实需要这些标头。仔细考虑 myLib 的 API 以及它需要什么。如果您要传入特征类型和矩阵,那么是的,您需要将它们添加到您的包含路径中,并且 .pri 文件可能对此有所帮助。您可能还需要考虑将 Eigen 之类的内容放入预编译的标头中。如果不是,那么您应该考虑重新排列您的头文件,以确保它们只提取该特定头文件所需的内容,并将尽可能多的包含移动到您的源文件中。同样,这将极大地帮助您缩短编译时间。
我认为您没有提到 myLib
是共享库还是静态库。如果它是一个静态库,那么是的,您需要将 myProject
链接到 myLib
所依赖的所有内容,但另一方面是部署变得更加容易,并且对该库的函数调用变得更加高效。如果是共享库,则只需链接到该库即可。
【讨论】:
以上是关于Qt 外部库包括内部自定义库的主要内容,如果未能解决你的问题,请参考以下文章
使用 LeanBack 支持库自定义 Android TV 界面