Рекомендации по хранению внешних библиотек в 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"

Как лучше это организовать?


person jaho    schedule 04.01.2014    source источник
comment
Разве вы не можете иметь их в своем проекте, например, в сторонней папке, например, Qt сама хранит сторонние источники?   -  person lpapp    schedule 04.01.2014
comment
Возможно, но что, если у меня есть несколько проектов, использующих одни и те же библиотеки? Кроме того, некоторые библиотеки используют установщики и всегда попадают в Program Files/..., должен ли я перемещать нужные мне файлы в свои проекты? Мне просто интересно, какова обычная практика в таких случаях, когда кто-то работает над проектом с нескольких машин.   -  person jaho    schedule 04.01.2014


Ответы (1)


Я бы порекомендовал иметь папку «3rdparty» в вашем проекте, как это делает Qt это внутреннее в своем репозитории. Таким образом, вы можете правильно настроить пути, которые будут одинаковыми на каждой машине.

Если необходимо иметь бинарники для разных архитектур и т.д., то я бы предложил даже импортировать код. Затем вы можете просто построить их на лету для целевой системы. Это займет немного больше времени, чем использование готовых библиотек, но это цена гибкости.

Если вам нужно, чтобы общие библиотеки работали в нескольких проектах, вы всегда можете использовать для этого выделенный репозиторий и иметь политику, в которой это должно быть проверено.

Один «термин», который вы, возможно, ищете, - это «внешние», которые существуют в мире svn, но вы также можете рассматривать его как репозиторий git в другом репозитории git. Дело в том, что вы подключаете общий «репозиторий» для совместного использования в проектах, зависящих от него.

У вас также всегда может быть сценарий установки, который просто правильно устанавливает пути для людей без особой гибкости. Я часто видел это в крупных компаниях с корпоративной средой, где они пытались добиться согласованности ценой меньшей гибкости.

Эти вещи довольно распространены в моем опыте в мире открытого исходного кода, а также проприетарного.

person lpapp    schedule 04.01.2014