Qbs:模块可以安装文件吗?

时间:2017-03-21 22:41:07

标签: qbs

我想要一个模块,它将导出所有必需的依赖项,如包含路径,库路径,并将安装所需的运行时库。

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

正确安装了文件

  • 如果直接指定完整路径或相对路径(作为文字)
  • 使用Project的属性。

工作解决方案:

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的属性时,它会说:"参考错误:无法找到变量:..."

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个solutuins:

  • hadrcoded path as a literal。不可移植的解决方案
  • 使用Project的属性。便携式,但取决于项目项目。

我不知道为什么Module的属性不能在Group内部使用。是否有一些限制或它是一个错误?

1 个答案:

答案 0 :(得分:1)

但后来发现这篇文章试图做同样的事情,也许对其他人有帮助。 发现可以通过为模块赋予一个ID并使用像这样的ID来引用该属性来完成在组内使用模块的属性

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