首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qbs自定义模块不工作

Qbs自定义模块不工作
EN

Stack Overflow用户
提问于 2017-07-12 00:36:49
回答 2查看 740关注 0票数 2

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

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

这些模块位于C:\Users\User\qt\qbs

Qbs模块replica.qbs:

代码语言:javascript
复制
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];
       }
    }
}

product.qbs:

代码语言:javascript
复制
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"
    ]
}

project.qbs:

代码语言:javascript
复制
import qbs

Project {
    references: ["ServiceExposer/ServiceExposer.qbs"]
    qbsSearchPaths: "C:\Users\User\qt\qbs"
}

我不知道我在哪里犯了错。

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

发布于 2017-07-12 03:44:19

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

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

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

代码语言:javascript
复制
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必须位于您的路径中。

欢迎任何建议。

票数 0
EN

Stack Overflow用户

发布于 2017-07-12 07:07:27

  1. 如果它是一个头文件,为什么要给它加上"cpp“标签?不应该是“hpp”吗?
  2. 你把文件放到源目录的原因是什么?您是否计划将其添加到您的存储库?通常,构建工件(无论它们是二进制文件还是人类可读的文件)应该放在build目录中,以免“污染”源代码树。
  3. 您没有提到模块现在以什么方式不能为您工作,因此很难诊断问题。你应该提到你期望发生的事情,以及发生了什么(如果有的话,给出具体的错误消息)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45040160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档