2

C++プログラムに「--version」オプションを含めて出力させたいのですが。

  • コンパイルされたアーキテクチャ
  • ソースのバージョン(例:v0.1.0)
  • アプリケーションの名前

また、autoconf / automakeを初めて使用していますが、configure.acにバイナリとバージョンの両方があることに気付きました。現在、アーキテクチャ情報は含まれていません。複数のアーチの下でコンパイルするため、このような情報を追加したくありません。

ヘッダーまたはソースファイルへのバージョン/アーチ/アプリ名情報の挿入を自動化する簡単な方法はありますか?ほとんどのC++コーダーはこれをどのように行いますか?

4

2 に答える 2

4

autoconfはconfig.h、、、、、、などの文字列マクロを提供するPACKAGEを提供PACKAGE_NAMEします。PACKAGE_STRINGPACKAGE_VERSIONVERSION

Argp引数パーサーを使用する場合、単に使用します

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <argp.h>
const char *argp_program_version = PACKAGE_STRING;
const char *argp_program_bug_address = PACKAGE_BUGREPORT;
/* et cetera */
int main(int argc, char **argv) {
    error_t argp_result = argp_parse(&argp, argc, argv, 0, 0, NULL);
    if (argp_result) return argp_result;
    /* et cetera */
}

その後、、--helpなど--versionが自動的に機能します。)

追加することもできます

AC_CANONICAL_HOST
AC_DEFINE_UNQUOTED([CHOST], ["$host"], [Canonical host])
AC_CANONICAL_BUILD
AC_DEFINE_UNQUOTED([CBUILD], ["$build"], [Canonical build])
AC_CANONICAL_TARGET
AC_DEFINE_UNQUOTED([CTARGET], ["$target"], [Canonical target])

あなたがあなたconfigure.acにもそれらの文字列マクロを持ちたいのなら、あなたにconfig.h。これらは通常、形式の文字列です$arch-$vendor-$kernel-$libc。ここで、はソフトウェアのビルド後にソフトウェア
CHOST実行
CBUILDするプラットフォーム、は現在ソフトウェアをビルドして
CTARGETいるプラ​​ットフォーム、はソフトウェアが動作するプラットフォームです。
(クロスコンパイルまたはクロスコンパイルツールチェーンを構築しない限り、これらはすべて同じです。)

于 2010-01-19T21:38:34.310 に答える
1

バージョンソースファイルを生成するPythonスクリプトを作成します。次に、使用しているビルドスクリプト/ツールで実行します。

ルールを選択して、実際にバージョンファイルを書き換え、Pythonスクリプトで適用します。これは、実行しているプロジェクトのタイプとリリース組織によって異なります。


私のホームプロジェクトでは、ビルドするたびにバージョンファイルを生成するスクリプトを使用します。これは、コンピューター開発者がバージョンをいつビルドしたかを知る必要があるためです。

しかし、多くの仕事で、バージョンファイルを生成するスクリプトを使用しましたが、必要な場合に限りました。これは、開発チームが特定のバージョンが「リリース」である時期を決定したためです。

Pythonはすべての開発プラットフォームで実行され、テキストファイルの操作に関しては非常に強力で簡単なので、Pythonスクリプトを使用することをお勧めします。その後、使用するビルドシステム(Visual Studio、CMakeなど)から呼び出すことができます。

于 2010-01-19T20:12:05.113 に答える