模块
代表可以加载到产品中的一系列属性和项目。 更多信息...
- 所有成员的列表,包括继承的成员
- 模块是所有项目列表的一部分。
属性
- additionalProductTypes : stringList
- condition : bool
- present : bool
- priority : int
- setupBuildEnvironment : script
- setupRunEnvironment : script
- validate : script
- version : string
详细描述
当一个项目对模块有依赖时,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.ignore
为true
。模块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 |
setupRunEnvironment : script |
validate : script |
在模块加载后运行的脚本。它可以用于检查属性值并在意外情况下抛出错误。返回值被忽略。
默认值: Undefined
version : string |
模块的版本。它由点分隔的整数值组成。您可以在Depends元素中检查此属性的特定值。
©2023 The Qt Company Ltd. 本文档中的文档贡献属于各自的版权所有者。提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3条款授权的。Qt及其相关标志是The Qt Company Ltd在芬兰以及/或其他国家的商标。所有其他商标均属于其各自所有者。