Пользовательский модуль 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 ответа
- Если это заголовочный файл, почему вы даете ему тег "cpp"? Разве это не должно быть "hpp"?
- По какой причине вы помещаете файл в исходный каталог? Планируете ли вы добавить его в свой репозиторий? Как правило, артефакты сборки (независимо от того, являются ли они двоичными файлами или файлами, читаемыми человеком) должны располагаться внутри каталога сборки, чтобы не "загрязнять" исходное дерево.
- Вы не упомянули, каким образом модуль не работает для вас, поэтому трудно диагностировать проблему. Вы должны упомянуть, что вы ожидали и что произошло вместо этого (с указанием конкретного сообщения об ошибке, если оно есть).
Мне удалось заставить его работать после того, как я немного покопался в документации и исходном коде, я поделился с вами рабочим модулем.
Если этот модуль импортирован, если в вашем проекте есть какие-либо определения удаленных объектов модуля.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 должен быть на вашем пути.
Любые предложения приветствуются.