Как правило сборки Qbs может использовать продукт
Я хочу использовать Qbs для компиляции существующего проекта. Этот проект уже содержит инструмент преобразования кода (my_tool), который интенсивно используется в этом проекте.
Пока что я (упрощенно):
import qbs 1.0
Project {
Application {
name: "my_tool"
files: "my_tool/main.cpp"
Depends { name: "cpp" }
}
Application {
name: "my_app"
Group {
files: 'main.cpp.in'
fileTags: ['cpp_in']
}
Depends { name: "cpp" }
Rule {
inputs: ["cpp_in"]
Artifact {
fileName: input.baseName
fileTags: "cpp"
}
prepare: {
var mytool = /* Reference to my_tool */;
var cmd = new Command(mytool, input.fileName, output.fileName);
cmd.description = "Generate\t" + input.baseName;
cmd.highlight = "codegen";
return cmd;
}
}
}
}
Как я могу получить ссылку на my_tool для команды?
2 ответа
Этот ответ основан на электронном письме от автора Qbs Йерга Борнеманна, который позволил мне процитировать его здесь.
Недвижимость usings
Правила позволяют добавлять артефакты из зависимостей продуктов к входам. В этом случае нас интересуют "прикладные" артефакты.
Список приложений может быть доступен как input.application
,
Application {
name: "my_app"
Group {
files: 'main.cpp.in'
fileTags: ['cpp_in']
}
Depends { name: "cpp" }
// we need this dependency to make sure that my_tool exists before building my_app
Depends { name: "my_tool" }
Rule {
inputs: ["cpp_in"]
usings: ["application"] // dependent "application" products appear in inputs
Artifact {
fileName: input.completeBaseName
fileTags: "cpp"
}
prepare: {
// inputs["application"] is a list of "application" products
var mytool = inputs["application"][0].fileName;
var cmd = new Command(mytool, [inputs["cpp_in"][0].fileName, output.fileName]);
cmd.description = "Generate\t" + input.baseName;
cmd.highlight = "codegen";
return cmd;
}
}
}
К сожалению usings
недвижимость в Rule
устарела начиная с QBS 1.5.0. На данный момент у меня такое же требование. Использование артефакта продукта в не мультиплексе Rule
,
Проблема с мультиплексом Rule
в случае изменения одного файла во входном наборе все входные артефакты будут повторно обработаны. Что довольно много времени в моем случае.