在Windows Qt Project上存储外部库的最佳实践



我正在Qt中进行一个项目,该项目使用了许多外部库,我想知道是否有一种通用的方法可以使源代码在不同的机器之间具有一定的可移植性。

目前,我通过Qt Creator(添加库…)将各种库添加到项目中,该程序使用.pro文件中的相对路径。这显然不仅在我移动项目后立即停止工作,而且如果任何库路径发生更改,也不会在其他机器上工作。使用绝对路径只解决了部分问题,因为我仍然需要确保每台机器上的每个库都位于相同的路径下。

举个例子,我的.pro文件现在一团糟:

LIBS += -L"c:/Program Files/Microsoft SDKs/Kinect/v1.7/lib/x86/" -lKinect10
win32 {
INCLUDEPATH += "c:/Program Files/Microsoft SDKs/Kinect/v1.7/inc"
DEPENDPATH += "c:/Program Files/Microsoft SDKs/Kinect/v1.7/inc"
}
LIBS += -ladvapi32 
-lgdi32
INCLUDEPATH += "$$PWD/../../../../../Libraries/PCL 1.6.0/include/pcl-1.6"
DEPENDPATH += "$$PWD/../../../../../Libraries/PCL 1.6.0/include/pcl-1.6"
INCLUDEPATH += "C:/Libraries/PCL 1.6.0/3rdParty/Boost/include"
DEPENDPATH += "C:/Libraries/PCL 1.6.0/3rdParty/Boost/include"
LIBS += -L"$$PWD/../../../../../Libraries/PCL 1.6.0/3rdParty/Boost/lib/" -llibboost_date_time-vc100-mt-gd-1_49
LIBS += -L"$$PWD/../../../../../Libraries/PCL 1.6.0/lib/" -lpcl_visualization_debug
LIBS += -L"$$PWD/../../../../../Libraries/opencv/build/x86/vc10/lib/" -lopencv_core245
INCLUDEPATH += "$$PWD/../../../../../Libraries/opencv/include"
DEPENDPATH += "$$PWD/../../../../../Libraries/opencv/include"

最好的组织方式是什么?

我建议在您的项目中有一个"3rdparty"文件夹,就像Qt在其存储库中的内部文件夹一样。通过这种方式,您可以正确设置每台机器上相同的路径。

如果有必要为不同的体系结构等提供二进制文件,那么我甚至建议导入代码。然后你就可以为目标系统构建它们。这将比使用预构建库花费更多的时间,但这就是灵活性的代价。

如果您需要让通用库在多个项目中工作,您可以始终为此使用专用存储库,并制定必须将其签出的策略。

您可能正在寻找的一个"术语"是存在于svn世界中的"外部",但您也可以将其视为另一个git存储库中的git存储。关键是,您可以插入通用的"存储库",以便在依赖它的项目之间共享

你也可以总是有一个设置脚本,只为人们正确设置路径,而没有太多灵活性。我在大公司的企业环境中看到了很多这种情况,他们试图以较低的灵活性为代价来实现一致性。

这些东西在我的开源世界中相当常见,也是专有的。

最新更新