7

私はいくつかのC++コードベースを持っており、doxygenで文書化されており、GNUmakeでビルドしています。バージョン情報はmakefileに一元化されており、次のようなものがあります。

バージョン=1.2.3.4

私のmakefileで、CFLAGSは次の定義を追加します。

CFLAGS + = -DAPP_VERSION = $(VERSION)

これにより、次のようなコードでバージョンを取得できます。

#define STR_EXPAND(tok) #tok
#define STR(tok) STR_EXPAND(tok)
int main()
{
    cout << "software version is << STR(APP_VERSION) << endl;
}

さて、私が欲しいのは、これをdoxygenで生成されたhtmlファイルに含めることです。

ソフトウェアの現在のバージョンは1.2.3.4です

私はmakefile変数をdoxygen構成ファイルにエクスポートすることができました:(編集:doxygenはmakefileから'make-doc'ターゲットを介して呼び出されます)

PREDEFINED = APP_VERSION = $(VERSION)

しかし、doxygen \ mainpageコマンドでこのようなことを試してみると、失敗します。これは、(もちろん)マクロ名がコメントで展開されないためです...

/**
\mainpage this is the doc
Current version is $(APP_VERSION) -- or -- ... is APP_VERSION
*/

質問

  • doxygenコメントでそのマクロを「拡張」する方法を知っていますか?これは、makefileにコメントを保持しているファイルのsed処理によって実行できますが、doxygenを使用して直接解決できる可能性がありますか?

  • バージョンIDがファイルで一意に定義され、ソフトウェアビルドシステムとドキュメントビルドシステムの両方でフェッチできるように、他のプロジェクトはバージョン管理をどのように処理しますか(VCSが提供する自動バージョン管理ツールを除く)。

関連:定義された値を表示する方法

4

3 に答える 3

3

コメント内のマクロは通常展開されません (たとえば、この回答を参照してください)。これは doxygen に固有のものではなく、PREDEFINED構成オプションを使用してこれを行う方法が思い浮かびません。

質問で述べているように、使用できます。この回答sedの 3 番目の箇条書きを参照してください。たとえば、次のように使用します。

INPUT_FILTER  = "sed -e 's/VERSION/1.0/'"

VERSIONは、すべてのソース ファイル内の のすべてのインスタンスをに置き換えます (すべてのソース ファイルを処理するのではなく、処理1.0するファイルを指定できます)。INPUT_FILTERどこにでも展開したくないかもしれないので、このトークンVERSIONのようなものを使用するのがおそらく最善です。また、makefile と doxygen 構成ファイルからバージョン番号を取得する方法も必要になります。これは、別の で実行できます。$(VERSION)sedsed

最後の箇条書きに対処するために、doxygen にはFILE_VERSION_FILTER各ファイルのバージョン番号を決定するための構成オプションがあります。これを使用すると、いくつかのバージョン情報 ( で指定されたコマンドから標準出力に出力されるものは何でもFILE_VERSION_FILTER) が各ファイル ページの上部に出力されます。ドキュメントには、さまざまなバージョン管理システムを使用してバージョン番号を取得する例があります。また、git と doxygen を使用してバージョン情報を抽出する方法を説明しているページもあります

この構成オプションの唯一の欠点は、ファイルのバージョン情報を最終ドキュメントのどこに表示するかを指定する方法がわからないことです。レイアウト ファイルを使用できると思います:ページのレイアウトを変更できると思いますが、私はこれを行ったことがなく、これを使用してメインページにバージョン情報を含めることがどれほど簡単かわかりません。

于 2012-05-22T08:52:43.620 に答える
2

コマンドマニュアルは、$(VARIABLE)環境変数を展開することを示唆しています。では、バージョンを環境変数に入れることはできますか?

于 2012-05-21T21:56:43.267 に答える
2

make の「エクスポート」機能、つまり非常に単純な make ファイルを使用する必要があります。

project_name=FooBar
export project_name
all:
    doxygen Doxyfile

C++ で次のコメントを使用できるようにします

/*! \mainpage Project $(project_name) Lorem ipsum dolor

これが大量のエクスポートを伴う PITA になるのはわかりますが、これはかなり簡単な方法です。別の方法として、Makefile の汚染を避けるために、すべてのエクスポートを含む別の BASH スクリプトから doxygen を実行することもできます。

于 2012-12-29T11:51:32.230 に答える