Пользовательский модуль Qbs не работает

Я хочу создать модуль для использования компилятора QtRO repc для создания файлов.h из файлов.rep.

Я кодировал модуль, но когда я пытаюсь загрузить его в продукт приложения, он не загружает и не отключает продукт.

модули находятся в C:\Users\User\qt\qbs

Модуль Qbs 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];
       }
    }
}

product.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"
    ]
}

project.qbs:

import qbs

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

Я не вижу, где я сделал ошибку.

Спасибо заранее за вашу помощь.

2 ответа

  1. Если это заголовочный файл, почему вы даете ему тег "cpp"? Разве это не должно быть "hpp"?
  2. По какой причине вы помещаете файл в исходный каталог? Планируете ли вы добавить его в свой репозиторий? Как правило, артефакты сборки (независимо от того, являются ли они двоичными файлами или файлами, читаемыми человеком) должны располагаться внутри каталога сборки, чтобы не "загрязнять" исходное дерево.
  3. Вы не упомянули, каким образом модуль не работает для вас, поэтому трудно диагностировать проблему. Вы должны упомянуть, что вы ожидали и что произошло вместо этого (с указанием конкретного сообщения об ошибке, если оно есть).

Мне удалось заставить его работать после того, как я немного покопался в документации и исходном коде, я поделился с вами рабочим модулем.

Если этот модуль импортирован, если в вашем проекте есть какие-либо определения удаленных объектов модуля.rep (QtRO (удаленные объекты)), он вызовет компилятор repc, скомпилирует их и поместит полученный файл.h в исходный каталог.

Все еще не завершенный, я не нашел способа манипулировать свойством files элемента Product Item для автоматического добавления.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 должен быть на вашем пути.

Любые предложения приветствуются.

Другие вопросы по тегам