Повысить сборку v2 с помощью CodeSynthesis XSD

Я пытаюсь научиться использовать 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 ;

0

Решение

Я столкнулся с почти идентичной проблемой около семи лет назад, пытаясь сгенерировать код из структурной спецификации. Boost.Build позволяет указывать прямые преобразования для одного файла.

Например:

 .y --> .cpp --> .obj

Тем не менее, просто нет синтаксиса для выражения более сложного дерева зависимостей, где один файл спецификаций создает целый набор файлов .cpp. Обходной путь должен был сделать следующее:

  1. Определите библиотеку, в которой перечислены все сгенерированные имена файлов
    (это означает, что вам придется обновлять этот глупый список вручную)

  2. Определите правило «prebuild» в подпроекте, который является зависимостью. Таким образом, генератор всегда запускается первым:

    ALWAYS prebuildcmd ;
    PREBUILD_CMD = "your-generator arg arg arg" ;
    
    rule Prebuild
    {
    local output = [ SHELL "$(PREBUILD_CMD)" ] ;
    ECHO $(output) ;
    }
    
    Prebuild prebuildcmd ;
    

    (это означает, что скрипт не является частью обычных зависимостей и должен быть достаточно умным, чтобы не помечать неизмененные файлы)

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector