Я пытаюсь научиться использовать boost build. Для начала, я бы хотел запустить xsd-инструмент codesnthesis для файла xsd для генерации кода на c ++. Этот инструмент принимает один файл в качестве входных данных и генерирует несколько выходных файлов. У меня возникли некоторые затруднения с тем, чтобы понять, как это сделать с помощью Boost build, и я не могу найти примеров, которые ужасно похожи на то, что я хочу сделать. Кто-нибудь может предоставить некоторые идеи здесь? Я прикрепил свой код ниже. Спасибо!
import path ;
import type ;
import generators ;
type.register XSD : xsd ;
generators.register-standard xsd.compilexsd : XSD : CPP ;
module xsd
{
actions compilexsd
{
xsd cxx-tree \
--show-sloc \
--generate-doxygen \
--generate-forward \
--generate-serialization \
--output-dir [path.parent($(<))] \
$(>)
}
}
exe app : main.cpp test.xsd ;
Я столкнулся с почти идентичной проблемой около семи лет назад, пытаясь сгенерировать код из структурной спецификации. Boost.Build позволяет указывать прямые преобразования для одного файла.
Например:
.y --> .cpp --> .obj
Тем не менее, просто нет синтаксиса для выражения более сложного дерева зависимостей, где один файл спецификаций создает целый набор файлов .cpp. Обходной путь должен был сделать следующее:
Определите библиотеку, в которой перечислены все сгенерированные имена файлов
(это означает, что вам придется обновлять этот глупый список вручную)
Определите правило «prebuild» в подпроекте, который является зависимостью. Таким образом, генератор всегда запускается первым:
ALWAYS prebuildcmd ;
PREBUILD_CMD = "your-generator arg arg arg" ;
rule Prebuild
{
local output = [ SHELL "$(PREBUILD_CMD)" ] ;
ECHO $(output) ;
}
Prebuild prebuildcmd ;
(это означает, что скрипт не является частью обычных зависимостей и должен быть достаточно умным, чтобы не помечать неизмененные файлы)