我有一个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,并在* .pro中包含这些* .pri。但这并不完全令人满意。
编辑: 我忘了提到myLib是一个共享库
答案 0 :(得分:0)
我要检查的第一件事是你在myProject中确实需要这些标题。仔细考虑myLib的API以及需要什么。如果您传入Eigen类型和矩阵,那么您将需要将它们添加到包含路径,而.pri文件可能对此有所帮助。您可能还想考虑在预编译的头文件中放置像Eigen这样的东西。如果没有,那么您应该重新排列头文件以确保它们只是拉入特定标头所需的内容并尽可能多地包含在源文件中。同样,这将大大有助于您的编译时间。
我不认为你提到myLib
是共享库还是静态库。如果它是静态库,则是,您需要将myProject
链接到myLib
依赖的所有内容,但另一方面是部署变得更容易,并且对该库的函数调用变得更有效。如果它是共享库,那么您只需要链接到该库。