如何将一个规则项的输出作为另一个规则项的输入?
How to get outputs of one Rule item as inputs of another one?
我想为我的项目创建自动跨平台安装生成器。为此,我制作了这个文件 myprojectpackage.qbs:
Product {
type: "mypackage"
Depends { name: "myproject" } // <- this one has type "application"
Depends { name: "applicationpackage" }
}
applicationpackage.qbs 使用了一些子模块,看起来像:
Module {
name: "applicationpackage"
Depends { name: "qtlibsbinariespackage" }
Depends { name: "3rdpartybinariespackage" }
Depends { name: "resourcepackage" }
}
所有这些模块都试图找到一些东西并复制到包目录。他们完成后,我有一个文件夹,里面有一个便携式版本的应用程序。该组的每个模块都有典型的结构:
Module {
name: "somepackage"
Rule {
condition: qbs.targetOS.contains("windows")
multiplex: true
alwaysRun: true
inputsFromDependencies: ["application"]
Artifact {
filePath: "Copied_files.txt"
fileTags: "mypackage"
}
prepare: {
var cmdQt = new JavaScriptCommand()
// prepare paths
cmdQt.sourceCode = function() {
// copy some files and write to Copied_files.txt
}
return [cmdQt]
}
}
}
便携式文件夹打包完成后,我想制作一个zip archieve。所以,我需要另一个模块,它将 运行 打包模块之后。我认为,这样做的唯一方法是将应用程序包中的模块创建的 .txt 文件作为另一个规则的输入。
我尝试了很多东西(FileTaggers、outputFileTags 等),但没有一个能正常工作。那么有没有办法让模块像我想的那样在管道中工作?
我的理解是否正确,您想要 "merge" 标记为 "mypackage" 的 txt 文件的内容进入存档,即所有文件中列出的所有内容都应该在那里结束?
如果是这样,那么您只需要一个执行聚合的 "top-level" 规则。您现有的规则会将其输出标记为例如"mypackage.part" 然后多路复用规则会将这些作为输入并创建 "mypackage" 工件。
请注意,有存档器模块 (https://doc.qt.io/qbs/archiver-module.html) 可以执行从聚合的 txt 文件为您创建包的最后一步。
我想为我的项目创建自动跨平台安装生成器。为此,我制作了这个文件 myprojectpackage.qbs:
Product {
type: "mypackage"
Depends { name: "myproject" } // <- this one has type "application"
Depends { name: "applicationpackage" }
}
applicationpackage.qbs 使用了一些子模块,看起来像:
Module {
name: "applicationpackage"
Depends { name: "qtlibsbinariespackage" }
Depends { name: "3rdpartybinariespackage" }
Depends { name: "resourcepackage" }
}
所有这些模块都试图找到一些东西并复制到包目录。他们完成后,我有一个文件夹,里面有一个便携式版本的应用程序。该组的每个模块都有典型的结构:
Module {
name: "somepackage"
Rule {
condition: qbs.targetOS.contains("windows")
multiplex: true
alwaysRun: true
inputsFromDependencies: ["application"]
Artifact {
filePath: "Copied_files.txt"
fileTags: "mypackage"
}
prepare: {
var cmdQt = new JavaScriptCommand()
// prepare paths
cmdQt.sourceCode = function() {
// copy some files and write to Copied_files.txt
}
return [cmdQt]
}
}
}
便携式文件夹打包完成后,我想制作一个zip archieve。所以,我需要另一个模块,它将 运行 打包模块之后。我认为,这样做的唯一方法是将应用程序包中的模块创建的 .txt 文件作为另一个规则的输入。
我尝试了很多东西(FileTaggers、outputFileTags 等),但没有一个能正常工作。那么有没有办法让模块像我想的那样在管道中工作?
我的理解是否正确,您想要 "merge" 标记为 "mypackage" 的 txt 文件的内容进入存档,即所有文件中列出的所有内容都应该在那里结束? 如果是这样,那么您只需要一个执行聚合的 "top-level" 规则。您现有的规则会将其输出标记为例如"mypackage.part" 然后多路复用规则会将这些作为输入并创建 "mypackage" 工件。 请注意,有存档器模块 (https://doc.qt.io/qbs/archiver-module.html) 可以执行从聚合的 txt 文件为您创建包的最后一步。