2016-09-13 11 views
3

У меня есть третья группа с предварительно скомпилированной библиотекой (.lib + .dll), которую я использую в своем приложении Qt.Копирование предварительно скомпилированных библиотек для создания каталога или добавления их в PATH в проекте QBS

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

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

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

Однако я не могу найти эквивалент в QBS. У меня есть следующий QBs файл, который затем получает включен и добавил через Depends в моем файле 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.

EDIT: Я попытался использовать cpp.systemRunPaths, который задокументирован here, но он не работает.

ответ

2

Я понял, как копировать готовые DLL-файлы для сборки каталога.

Чего недоставало, так это свойство 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 файлах.

1

alan, your're на правильном пути. Просто поместите

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" } из Экспорт Блок.

+0

Похоже, что в последней версии QBS (1.7.1) «cpp.libraryPaths: [product.libLocation]» также добавляет его в системный путь. Приложение запускается нормально при запуске из QtCreator без копирования dll в каталог сборки. –

 Смежные вопросы

  • Нет связанных вопросов^_^