1

コマンド ライン引数の解析機能を作成するために、XML (または同様のもの) から C/C++ ソース コードを生成するツールはありますか?

質問のより長い説明:

私は今まで、コマンドライン引数の解析にgengetoptを使用していました。独自の構成形式 (テキスト ファイル) から C ソース コードを生成する優れたツールです。たとえば、gengetopt 設定行

option "max-threads" m "max number of threads" int default="1" optional

とりわけ、変数を生成します

int max_threads_arg; 

後で使用できるようにします。

しかし、gengetopt はこの機能を提供しません:

  • gengetopt 構成フォーマットから Unix man ページを生成する方法

  • gengetopt 構成フォーマットから DocBook または HTML ドキュメントを生成する方法

  • 共通のコマンド ライン オプションを共有する複数のプログラムがある場合に、C/C++ ソース コードを再利用し、gengetopt 構成行を再利用する方法

もちろん、gengetopt を実行すると、ドキュメンテーション テキストが提供されます。

command --help

しかし、マークアップされたドキュメント (HTML、DocBook、Unix man ページなど) を探しています。

私のニーズに合ったリベラルなオープン ソース ライセンスを持つ C/C++ コマンド ライン引数ツール/ライブラリがあるかどうか知っていますか?

そのようなツールは XML を使用してコマンド ライン引数を指定すると思います。これにより、さまざまな形式 (man ページなど) でドキュメントを簡単に生成できます。XML ファイルは、ビルド時に C/C++ ソース コードを生成するためにのみ必要です。

実行時に XML で構成ファイルを読み取るために、他のコマンド ライン引数解析ライブラリを使用できることはわかっていますが、ビルド時に XML (または同様のもの) から C/C++ ソース コードを生成するツールを探しています。

更新 1

コンパイル時にはできるだけ多くの計算を行い、実行時にはできるだけ少なくしたいと考えています。そのため、たとえば boost::program_options::variables_map ( tutorial ) のようなコマンド ライン オプションのマップを提供するライブラリは避けたいと思います。

言い換えれば、私はすることargs_info.iterations_argを好むvm["iterations"].as<int>()

ユーザーtsug303がライブラリを提案しましたTCLAP。それはかなりいいですね。複数のプログラムがいくつかの共通オプションを共有する場合にコードを再利用できるように、オプションをグループに分割することは私のニーズに合っています。XMLの構成ファイル形式からソースコードを生成するわけではありませんが、私はその回答を受け入れられた回答としてマークしました。

しかし、提案されたライブラリのどれも私の要件をすべて満たすものではなかったため、独自のライブラリを作成することを考え始めました。スケッチ: カスタム XML 形式を入力として受け取り、C++ コードと XML スキーマの両方を生成する新しいツール。その他の C++ コードは、ツール CodeSynthesis XSD を使用して XML スキーマから生成されます。C++ コードの 2 つのチャンクは、1 つのライブラリに結合されます。追加の利点の 1 つは、コマンド ライン オプションの XML スキーマを取得し、それらすべてをバイナリ形式 (CodeSynthesis XSD から生成された CDR 形式) にシリアル化する方法を取得できることです。そのようなライブラリを書く時間があるかどうか見ていきます。もちろん、すでに実装されているライブラリを見つけることをお勧めします。

今日、私はユーザーNore提案された代替案について読みました。有望そうに見えるので、計画されている C++ コード生成が実装されたら、ぜひ試してみたいと思います。Noreからの提案は、私が探していたものに最も近いようです。

4

3 に答える 3

2

たぶん、このTCLAPライブラリはあなたのニーズに合うでしょうか?

于 2012-05-05T19:13:32.490 に答える
1

このプロジェクトをご覧になることをお勧めします。それは私が現在取り組んでいるものです: XML でコマンドライン引数を記述するための XSD スキーマ。XSLT 変換を行って、bash および Python コード、XUL フロントエンド インターフェイス、および HTML ドキュメントを作成しました。

残念ながら、私はまだ C/C++ コードを生成していません (計画中です)。

編集: C パーサーの最初の動作バージョンが利用可能になりました。それが役に立てば幸い

于 2012-07-14T15:02:07.190 に答える