为什么qbs会忽略我的规则?

时间:2015-05-20 06:39:23

标签: qt qbs

我有这个简单的代码

import qbs

Project {
name: "simple_test"

Product {
    name: "micro"
    type: "other"
    Group {
        files: '*.q'
        fileTags: ['qfile']
    }

    Rule {
        id: check1
        inputs: ["qfile"]
        prepare: {
            var cmd = new JavaScriptCommand();
            cmd.description = "QFile passing"
            cmd.silent = false;
            cmd.highlight = "compiler";
            cmd.sourceCode = function() {
                print("Nothing to do");
            };
            return cmd;
        }
    }
    Transformer {
        inputs: ['blink.q']
        Artifact {
            filePath: "processed_qfile.txt"
            fileTags: "processed_qfile"
        }
        prepare: {
            var cmd = new JavaScriptCommand();
            cmd.description = "QFile transformer";
            cmd.highlight = "compiler";
            cmd.sourceCode = function() {
                print("Another nothing");
            };
            return cmd;
        }
    }
}
}

并将两个文件放入blink.q和blink1.q

通过文档,我必须看到"编译输出" windows 3行:两行 " QFile传递"和#34; QFile变压器"

但是我看到只有Transformer块才有效(没有" QFile传递"根本没有);(我的规则出了什么问题?

1 个答案:

答案 0 :(得分:2)

您的规则必须实际生成一些工件,并且您的产品类型必须以某种方式(直接或间接)依赖于规则的输出工件的文件标记。换句话说,没有任何东西取决于你的规则的输出,所以规则没有被执行。

您可能想要的是以下内容:

import qbs

Project {
    name: "simple_test"

    Product {
        name: "micro"
        type: ["other", "processed_qfile"]
        Group {
            files: '*.q'
            fileTags: ['qfile']
        }

        Rule {
            id: check1
            inputs: ["qfile"]
            Artifact {
                filePath: "processed_qfile.txt"
                fileTags: "processed_qfile"
            }
            prepare: {
                var cmd = new JavaScriptCommand();
                cmd.description = "QFile passing"
                cmd.silent = false;
                cmd.highlight = "compiler";
                cmd.sourceCode = function() {
                    print("Nothing to do");
                };
                return cmd;
            }
        }
    }
}

请注意添加:

  • check1规则中的一个工件项,描述将由规则生成的输出文件。
  • processed_qfile添加到产品类型,在依赖关系树中创建连接并导致在构建产品时执行规则