0

我有兴趣使用 Apache Avro 的代码生成工具(即 python 脚本)生成 C++ 标头。根据文档,它应该很容易做到,但我通常不使用 python,所以对我来说事情看起来有点奇怪。

指令状态:

生成代码是一个两步过程:

precompile < imaginary > imaginary.flat

预编译步骤将模式转换为代码生成器使用的中间格式。这个中间文件只是模式的基于文本的表示,通过模式类型的树结构的深度优先遍历来展平。

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

这告诉代码生成器读取您的展平模式作为其输入,并在 example.hh 中生成一个 C++ 头文件。可选参数命名空间会将对象放在该命名空间中......

我的问题(不,我不能去看医生或使用面霜):

我没有看到任何详细解释如何预编译的内容。文档看起来好像我只是在命令提示符下键入“预编译”并提供命令行参数,那么事情就会神奇地工作,但预编译不是有效的 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)
4

2 回答 2

1

我想这样做的唯一方法是:

  1. 下载虚拟盒子。
  2. 安装 Ubuntu(或其他发行版)。
  3. 下载 Avro。
  4. 安装 cmake。
  5. 安装 C++ 编译器(构建必不可少)。
  6. 安装 boost、flex、bison(sudo apt-get install boost flex bison);顺便说一句,您将特别需要这些 boost 库:
    -- regex
    -- filesystem
    -- system
    -- program_options
  7. 构建 Avro:

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

您现在可以生成头文件(仍在 VM 的终端窗口中):

python 脚本/gen-cppcode.py --input=example.flat --output=example.hh

请注意,即使您生成了 C++ 文件,您仍然无法在 Windows 中使用它进行构建(即使您对 avro-cpp-1.5.1/api 有正确的依赖项。Avro 依赖于 GNU 库(例如作为 sys/uio.h),我还不确定如何具体解决它们。

于 2011-08-09T17:00:24.953 回答
0

我发现运行 gen-cppcode.py需要python 版本 2

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

于 2015-10-08T22:41:33.687 回答