Qbs 自定义模块不起作用



我想创建一个模块来使用QtRO repc编译器从.rep文件生成.h文件。

我对模块进行了编码,但是当我尝试将其加载到应用程序产品中时,它不会加载并禁用该产品。

模块位于 C:\Users\User\qt\qbs 中

Qbs Module replica.qbs:

import qbs
Module {
property bool source: true
FileTagger {
patterns: "*.rep"
fileTags: ["rep"]
}
Rule {
inputs: ["rep"]
Artifact {
fileTags: ["txt_output"]
}
prepare: {
var cmd = new Command();
cmd.program = "repc.exe";
if source {
cmd.arguments = ["-i", "rep", "-o", "source", input.filePath];
} else {
cmd.arguments = ["-i", "rep", "-o", "replica", input.filePath];
}
console.log("repc on : ", input.filePath);
return [cmd];
}
}
}

产品.qbs:

import qbs
Application {
name: "ServiceExposer"
Depends { name: "cpp" }
Depends { name: "Qt.core" }
Depends { name: "Qt.remoteobjects" }
Depends { name: "replica" }
files: [
"main.cpp",
"service_exposer.rep"
]
}

项目.qbs:

import qbs
Project {
references: ["ServiceExposer/ServiceExposer.qbs"]
qbsSearchPaths: "C:UsersUserqtqbs"
}

我不明白我在哪里犯了错误。

提前感谢您的帮助。

  1. 如果它是一个头文件,你为什么要给它"cpp"标签?不应该是"hpp"吗?
  2. 将文件放入源目录的原因是什么?您是否计划将其添加到存储库中?通常,构建工件(无论是二进制文件还是人类可读的文件(都应位于构建目录中,以免"污染"源代码树。
  3. 没有提到该模块现在以什么方式不适合您,因此很难诊断问题。您应该提及您希望发生的事情以及发生的情况(如果有,请提供具体的错误消息(。

在文档和源代码中挖掘了更多内容后,我设法使其工作,我与您分享了工作模块。

导入此模块时,如果您的项目中有任何 .rep 文件(QtRO(远程对象((模块远程对象定义(,它将调用 repc 编译器并编译它们并将生成的 .h 文件放在源目录中。

仍然不完整,我没有找到一种方法来操作产品项的 files 属性以自动向其添加 .h。

import qbs
import qbs.FileInfo
Module {
FileTagger {
patterns: ["*.rep"]
fileTags: ["repc-rep"]
}
Rule {
inputs: ["repc-rep"]
Artifact {
filePath: repc_" + FileInfo.baseName(input.fileName) + "_source.h"
fileTags: ["cpp"]
}
prepare: {
var cmd = new Command();
cmd.description = "repc " + input.fileName;
cmd.program = "repc.exe"
cmd.arguments = ["-i", "rep", "-o", "source", input.filePath, output.filePath];
var cmd2 = new JavaScriptCommand();
cmd2.silent = true;
cmd2.sourceCode = function() {
File.copy(output.filePath, FileInfo.path(input.filePath) + "/" + output.fileName);
}
return [cmd, cmd2];
}
}
}

为了使此模块正常工作,repc.exe 必须在您的路径中。

欢迎任何建议。

最新更新