Apache Avroのコード生成ツール(つまり、Pythonスクリプト)を使用してC++ヘッダーを生成することに興味があります。ドキュメントによると、それはかなり簡単なはずですが、私は通常Pythonを使用しないので、物事は私にはちょっと奇妙に見えます。
指示は次のように述べています。
コードを生成するには、2段階のプロセスが必要です。
precompile < imaginary > imaginary.flat
プリコンパイルステップは、スキーマをコードジェネレーターで使用される中間形式に変換します。この中間ファイルは、スキーマのテキストベースの表現であり、スキーマタイプのツリー構造の深さ優先探索によってフラット化されています。
python scripts/gen-cppcode.py --input=example.flat --output=example.hh –-namespace=Math
これにより、コードジェネレーターは、フラット化されたスキーマを入力として読み取り、example.hhにC++ヘッダーファイルを生成するように指示されます。オプションの引数名前空間は、オブジェクトをその名前空間に配置します...
私の問題(いいえ、医者に診てもらったり、クリームを使ったりすることはできません):
プリコンパイルの方法を詳しく説明しているものは何もありません。ドキュメントでは、コマンドプロンプトに「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)