0

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)
4

2 に答える 2

1

これを行うために私が考えた唯一の方法は次のとおりです。

  1. VirtualBoxをダウンロードします。
  2. Ubuntu(または別のディストリビューション)をインストールします。
  3. Avroをダウンロードします。
  4. cmakeをインストールします。
  5. C ++コンパイラをインストールします(ビルドエッセンシャル)。
  6. boost、flex、bisonをインストールします(sudo apt-get install boost flex bison); ところで、特にこれらのブーストライブラリが必要になります: -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 scripts / 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 に答える