模块

代表可以加载到产品中的一系列属性和项目。 更多信息...

属性

详细描述

当一个项目对模块有依赖时,Qbs会在项目的范围内创建模块项目的一个实例。然后项目可以分别从加载的模块读取和写入属性。

当项目表达对模块的依赖时,Qbs会在项目的范围内创建模块项目的一个实例。然后项目可以分别从加载的模块读取和写入属性。

不同产品中的模块相互隔离,就像项目无法访问彼此的属性一样。不过,项目可以使用Export项目将模块的依赖和属性传递给其他相关产品。

以下(有点人为)的模块通过从文件中删除某些字符来预处理文本文件。模块的名称是txt_processor

import qbs.FileInfo
import qbs.TextFile

Module {
    property stringList unwantedCharacters: []

    FileTagger {
        patterns: ["*.raw"]
        fileTags: ["raw-txt"]
    }

    Rule {
        inputs: ["raw-txt"]

        Artifact {
            filePath: FileInfo.relativePath(input.filePath, product.sourceDirectory) +
                       "/" + input.fileName + ".processed"
            fileTags: ["processed-txt"]
        }

        prepare: {
            var cmd = new JavaScriptCommand();
            cmd.description = "Processing " + input.fileName;
            cmd.sourceCode = function() {
                var inFile = new TextFile(input.filePath, TextFile.ReadOnly);
                var content = inFile.readAll();
                inFile.close();
                var unwantedChars = input.txt_processor.unwantedCharacters;
                for (var c in unwantedChars)
                    content = content.replace(unwantedChars[c], "");
                var outFile = new TextFile(output.filePath, TextFile.WriteOnly);
                outFile.write(content);
                outFile.close();
            };
            return cmd;
        }
    }
}

这是一个产品是如何使用该模块的示例

Product {
    type: "processed-txt"
    Depends { name: "txt_processor" }
    txt_processor.unwantedCharacters: ["\r"]
    files: [
        "file1.raw",
        "file2.raw"
    ]
}

生成的文件将标记为processed-txt,并可能被其他模块中的规则消费。如果另一个规则中有processed-txt在它的inputs属性中,实现这一点是可能的。

有关如何使您自己的模块可用于 Qbs 的更多信息,请参阅自定义模块和项目

访问产品和模块属性

在模块项目中定义属性时,右侧表达式是绑定。绑定可以引用当前模块的以下属性:

  • 当前模块的其他属性
  • 此模块所依赖的其他模块
  • 从属产品

请注意,这仅适用于模块中的绑定。规则和其他嵌套项目中的属性访问方式不同。

访问当前模块的属性

同一模块中的同级属性可以直接通过其名称访问

Module {
    property stringList windowsDefaults: ["\r"]
    property stringList unwantedCharacters: windowsDefaults
}

依赖模块的属性

当模块通过Depends元素加载另一个模块时,它可以通过模块的名称访问其他模块的属性。假设有一个模块OtherModule具有一个属性otherProperty,这样的访问将如下所示:

Module {
    Depends { name: "OtherModule" }
    property string myProperty: "something-" + OtherModule.otherProperty
}

访问相依产品的属性

Module {
    property bool featureEnabled:
            (product.type.includes("application")) ?  true : false
}

特殊属性值

为模块中定义的每个属性,Qbs 提供了特殊的original值,这个值包含模块本身的属性值(可能被配置文件重写)。

依赖参数

模块可以声明依赖参数。这些参数可以在Depends元素中设置。模块的规则可以读取依赖参数并根据情况进行操作。

在以下示例中,模块foo声明了参数ignore。对接到bar的依赖设置为参数foo.ignoretrue。模块foo中的一个规则忽略所有将foo.ignore设置为 true 的依赖。

Module {    // Definition of module 'foo'.
    Parameter { property bool ignore }
    Rule {
        ...
        prepare: {
            for (i in product.dependencies) {
                var dep = product.dependencies[i];
                if (dep.foo.ignore)
                    continue;
                // Do something with the dependency.
            }
        }
    }
    ...
}
----------
Product {
    Depends { name: "foo" }
    Depends { name: "bar"; foo.ignore: true }
}

属性文档

additionalProductTypes : stringList

一个元素列表,这些元素将添加到具有对模块依赖关系的产品的type属性中。

默认值: []


condition : bool

该模块是否启用。如果此属性为false,则不会将周围的模块项考虑在内进行模块查找。

默认值: true


[只读] present : bool

如果相应的Depends元素中将其required属性设置为false且模块未找到,则此属性为false

默认值: true


priority : int

该模块实例的优先级。如果对于模块名称有多个模块实例可用,则选择具有最高优先级的模块。

默认值: 0


setupBuildEnvironment : script

设置产品构建环境的脚本。

此脚本中的代码被视为具有签名function(project, product)的函数。

使用环境函数来修改环境。

此脚本的返回值被忽略。

默认值: Undefined


setupRunEnvironment : script

设置产品运行环境的脚本。

此脚本中的代码被视为具有签名function(project, product, config)的函数。

config参数是通过run命令传递的任意字符串列表。特定模块支持的值列在其相应文档中。

使用环境函数来修改环境。

此脚本的返回值被忽略。

默认值: Undefined


validate : script

在模块加载后运行的脚本。它可以用于检查属性值并在意外情况下抛出错误。返回值被忽略。

默认值: Undefined


version : string

模块的版本。它由点分隔的整数值组成。您可以在Depends元素中检查此属性的特定值。


©2023 The Qt Company Ltd. 本文档中的文档贡献属于各自的版权所有者。提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3条款授权的。Qt及其相关标志是The Qt Company Ltd在芬兰以及/或其他国家的商标。所有其他商标均属于其各自所有者。