Копирование предварительно скомпилированных библиотек для создания каталога или добавление их в PATH в проекте QBS

У меня есть сторонняя скомпилированная библиотека (.lib + .dll), которую я использую в своем приложении Qt.

В обычном (qmake) проекте QtCreator у меня есть следующие строки в моем файле .pro:

LIBS += -L$$PWD/lib/release -ltag
INCLUDEPATH += include/taglib

Существует также опция во вкладке «Проекты» -> «Выполнить» -> «Добавить путь поиска библиотеки сборки в PATH», которая по умолчанию включена. Это гарантирует, что путь к LIBS будет добавлен в системную переменную PATH, чтобы можно было найти dll.

Тем не менее, я не могу найти эквивалент в QBS. У меня есть следующий файл QBS, который затем включается и добавляется через Зависит в моем файле CppApplication:

DynamicLibrary {
name: "taglib"
files: "lib/release/tag.dll"
Export {
Depends { name: "cpp" }
cpp.includePaths: [".","include/taglib"]
cpp.libraryPaths: ["lib/release"]
cpp.dynamicLibraries: "tag"}

Group {
name: "taglib"fileTagsFilter: ["dynamicLibrary"]
qbs.install: true
}

}

Компоновщик проходит, но приложение не может найти DLL во время выполнения и вылетает.
Можно ли добавить cpp.libraryPaths в системный PATH во время выполнения?

Другой вариант — скопировать файл DLL в каталог для сборки, но я не могу понять, как это сделать для предварительно скомпилированных библиотек в QBS.

РЕДАКТИРОВАТЬ: я пытался использовать cpp.systemRunPaths, который задокументирован Вот но это не работает

3

Решение

Я разобрался, как скопировать готовые файлы .dll для сборки dir.

Чего не хватало, так это свойства FileTagger, поскольку, похоже, QBS не учитывает динамические библиотеки DLL-файлов.

FileTagger {
patterns: ["*.dll"]
fileTags: ["dynamicLibrary"]
}

Вопрос по-прежнему заключается в том, как добавить cpp.libraryPaths в системный PATH во время выполнения. Я нашел следующий метод в core.qbs:

setupRunEnvironment: {
var env;
if (qbs.targetOS.contains('windows')) {
env = new ModUtils.EnvironmentVariable("PATH", qbs.pathListSeparator, true);
env.append(binPath);
env.set();
}
...
}

Я понятия не имею, как изменить или вызвать этот метод в моих файлах QBS.

2

Другие решения

Алан, ты на правильном пути. Просто место

setupRunEnvironment: {
var env;
if (qbs.targetOS.contains('windows')) {
env = new ModUtils.EnvironmentVariable("PATH", qbs.pathListSeparator, true);
env.append(binPath);
env.set();
}
}

в DynamicLibrary {} блок, ниже последнего Group {}, + Изменить binPath указать на папку с вашими общими библиотеками. Это работает по крайней мере с Windows.

Может быть, вам нужно двигаться Depends { name: "cpp" } вне экспорт блок.

1

По вопросам рекламы [email protected]