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 界面

spring-data 存储库自定义查询

密钥库自定义路径的Gradlew问题

如何为新式体验文档库自定义 SharePoint Online 列/字段?

三方开源库自定义

微信小程序|组件库自定义加载动画