Qbs: Может ли модуль устанавливать файлы?

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

Module {
    Depends { name: "cpp" }
    property path libLocation: ""
    cpp.dynamicLibraries: [
        "mylib"
    ]
    cpp.staticLibraries: [
        "mylib"
    ]
    cpp.includePaths: [
        libLocation + "include/",
    ]
    cpp.libraryPaths: [
        libLocation + "lib/",
    ]
    Group {
        name: "runtime libraries"
        qbs.install: true
        prefix: 'lib_location/'
        files: ["*.dll"]
    }
}

Все работает, но файлы не установлены. Возможно ли это сделать?

Обновление 1:

Файлы правильно установлены:

  • если полный или относительный путь указан напрямую (как литералы)
  • используя свойства проекта.

Рабочий раствор:

Module {
    ...
    Group {
        name: "runtime libraries"
        prefix: "D:/Projects/MyProject/Dependencies/SDL2pp/mingw/bin/" // works!
        //prefix: project.dependenciesPath + "SDL2pp/mingw/bin/" // also works!

        files: "*.dll"
        qbs.install: true
    }
}

Но когда я пытаюсь использовать свойство модуля, он говорит: "Ошибка ссылки: не удается найти переменную: ..."

Module {
    ...
    property bool installDlls: true
    property string libPath:  ""
    Group {
        name: "runtime libraries"
        prefix: libPath // Can't find variable
        files: "*.dll"
        qbs.install: installDlls // Can't find variable
    }
}

Кроме того, это не работает, если модуль FileInfo используется для построения пути. Вне группы путь был решен в основном.

import qbs
import qbs.FileInfo

Module {
    ...
    Group {
        name: "runtime libraries"
        prefix: FileInfo.joinPaths(project.dependenciesPaths, './SDL2pp/mingw/bin/') // silently not works
        files: "*.dll"
        qbs.install: true
    }
}

Заключение
Я нашел 2 солютуинов этого:

  • кодированный путь как литерал. Непортативное решение
  • используя собственность проекта. Портативный, но зависит от элемента проекта.

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

1 ответ

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

Module { id: mymodule ... property bool installDlls: true property string libPath: "" Group { name: "runtime libraries" prefix: mymodule.libPath files: "*.dll" qbs.install: mymodule.installDlls } }

Я использую Qbs 1.12.1

Другие вопросы по тегам