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

标签 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"

什么是最好的组织方式?

最佳答案

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

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

如果您需要让公共(public)库跨多个项目工作,您始终可以为此使用专用存储库,并制定必须 check out 的策略。

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

您总是可以有一个设置脚本,它只是为人们正确设置路径而没有太大的灵 active 。我在具有企业环境的大公司中经常看到这种情况,在这些公司中,他们试图以降低灵 active 为代价来实现一致性。

根据我在开源世界和专有领域的经验,这些事情相当普遍。

关于c++ - 在 Windows Qt Project 上存储外部库的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925067/

相关文章:

c++ - 如何一起使用 C++ 和 C 可变参数?

windows - Windows批处理中的!call和call有什么区别

linux - 安装 Centos 后恢复 Windows 7 引导加载程序

python - 如何在 python 中获取当前用户和脚本的工作目录?

c++ - Qt 如何打开当前目录中的文件?或者这有什么问题?

python - QPainterPath - 移动/删除元素

使用 QT Designer 的 QT/PyQT 最佳实践

c++ - 有没有办法正确地 std::move const 数据?

c++ - 为什么在 header 上的结构中声明的模板不违反 ODR 而特化却违反了?

c++ - map<string, vector <pair<int, int>>> 推回成对?