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

时间:2014-01-04 18:39:02

标签: c++ windows qt qmake

我正在使用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"

组织这个的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

我建议你的项目中有一个“3rdparty”文件夹就像Qt does that internal in its repository一样。这样,您可以正确设置每台计算机上相同的路径。

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

如果您需要在多个项目中使用公共库,您可以随时使用专用存储库,并制定必须签出的策略。

您可能正在寻找的一个“术语”是存在于svn世界中的“外部”,但您也可以将其视为另一个git存储库中的git存储库。关键在于,您将公共“存储库”插入其中以共享对其具有依赖性的项目。

您可以随时拥有一个设置脚本,只需为人们正确设置路径,而不会有太大的灵活性。我在拥有企业环境的大公司中看到了很多,他们试图以低灵活性的价格保持一致性。

这些事情在我在开源世界的经验以及专有方面都很常见。