我有兴趣使用 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)