Как создать заголовок C ++ с помощью Apache Avro (сценарий Python) - PullRequest
0 голосов
/ 05 августа 2011

Я заинтересован в создании заголовка C ++ с использованием инструмента генерации кода Apache Avro (т.е. скрипта python). Согласно документации это должно быть довольно легко сделать, но я обычно не использую python, поэтому для меня все выглядит немного странно.

Состояние инструкции:

Генерирование кода выполняется в два этапа:

precompile < imaginary > imaginary.flat

На этапе предварительной компиляции схема преобразуется в промежуточный формат, который используется генератором кода.Этот промежуточный файл является просто текстовым представлением схемы, сглаженным путём первого-глубинного обхода древовидной структуры типов схем.

python scripts/gen-cppcode.py --input=example.flat --output=example.hh –-namespace=Math

Это говорит генератору кода прочитать вашу сглаженную схемув качестве входных данных и сгенерировать заголовочный файл C ++ в example.hh.Необязательный аргумент namespace поместит объекты в это пространство имен ...

Моя проблема (нет, я не могу обратиться к врачу или использовать крем для него):

Я неувидеть все, что подробно объясняет, как прекомпилировать.Документация создает впечатление, что если я просто наберу «precompile» в командной строке и предоставлю аргументы командной строки, то все будет работать волшебным образом, но precompile не является допустимой командой Windows. Так, как правильно прекомпилировать в Windows? Если кто-нибудь знает, как это сделать, ПОЖАЛУЙСТА, дайте мне знать!

Я также попытался запустить gen-cppcode.py сценарий, но он получает сообщение об ошибке в строке 316 (что, я подозреваю, может происходить из-за того, что я не скомпилировал схему):

def doEnum(args):
    structDef = enumTemplate;
    typename = args[1]
    structDef = structDef.replace('$name$', typename)
    end = False
    symbols = '';
    firstsymbol = '';
    while not end:
        line = getNextLine()
        if line[0] == 'end': end = True
        elif line[0] == 'name':
            if symbols== '' :
                firstsymbol = line[1]
            else :
                symbols += ', '
            symbols += line[1]
        else: print "error" // <-- Syntax Error: invalid syntax
    structDef = structDef.replace('$enumsymbols$', symbols);
    structDef = structDef.replace('$firstsymbol$', firstsymbol);
    addStruct(typename, structDef)
    return (typename,typename)

Ответы [ 2 ]

0 голосов
/ 09 октября 2015

Я обнаружил, что требуется Python версии 2 для запуска gen-cppcode.py

https://www.python.org/downloads/

0 голосов
/ 09 августа 2011

О единственном способе, который я рассчитывал сделать, это:

  1. Загрузить VirtualBox.
  2. Установить Ubuntu (или другой дистрибутив).
  3. Загрузить Avro.
  4. Установка cmake.
  5. Установка компиляторов C ++ (необходимая сборка).
  6. Установка boost, flex, bison (sudo apt-get install boost flex bison);Кстати, вам конкретно понадобятся следующие библиотеки повышения:
    - регулярное выражение
    - файловая система
    - система
    - program_options
  7. Сборка Avro:

    $ tar xf avro-cpp-1.5.1.tar.gz
    $ cd avro-cpp-1.5.1
    $ cmake -G "Makefile Unix"
    $ make -j3
    $build / precompile file.input file.flatoutput

Теперь вы можете сгенерировать файл заголовка (все еще в окне терминала виртуальной машины):

python-скрипты/gen-cppcode.py --input = example.flat --output = example.hh

Обратите внимание, что даже после создания файла C ++ вы все равно не сможете создать его в Windows(даже если у вас есть правильные зависимости, включаемые в avro-cpp-1.5.1 / api. Avro имеет зависимости от библиотек GNU (таких как sys / uio.h), и я пока не уверен, как их конкретно разрешить.

...