2011-03-11 15 views
6

私のQt/C++アプリケーションでは、どのバージョンであるかを知りたいです。それはいくつかの設定ファイルではなく、アプリケーションバイナリにコンパイルされたバージョン番号であることを知るべきです。バージョン自体は "XYZ"のような文字列で、Xはメジャーバージョン番号、Yはマイナーバージョン番号、ZはSVNの下のリビジョンです(またはSVNのリビジョン番号からバージョン "XY0"のリビジョン番号を引いたもの) )。あなたはsconsでこれを達成する最も簡単な方法は何と思いますか?sconsでバージョンを管理するためのベストプラクティス?

+1

バージョン番号の唯一の目的は、ユーザーに何かを表示する場合、文字列はOKです。プログラムによるアクセスがある場合は、それぞれのバージョンコンポーネントを個別のフィールドに入れたいと思うでしょう(http://stackoverflow.com/questions/2195573/why-use-a-nested-ruby-module-for-version-情報/ 2195824#2195824)。また、(例えば、リリースビルドスクリプトの)バージョン増分を簡単に自動化するために、バージョンをフィールドに分けることが勝利です。 –

答えて

8

SConsには、ファイルを生成するためのSubstfileおよびTextfileビルダーがあります。したがって、pysvnを使用して、または(ファイルからテンプレートを取得)またはTextfile(提供されたコンテンツを書き込むだけ)を使用してファイルに出力を書き込む関数を作成します。そのファイルをコンパイルし、残りのアプリケーションとリンクするよりも。

ソースファイルでなければならないファイル(ないヘッダ)(C/C++を想定したが、同じ技術は、任意の言語に適切である)のような内容を含む:

char *VERSION = "X.Y.Z"; 

(および任意の他あなたが欲しい代替フォーマット)とどこかに、(それはとにかく意志、いくつかの他のソースは、おそらく右、あまりにも変更したため)一つだけのファイルが再コンパイルされますプラスアプリケーションが再リンクより

extern char *VERSION; 

を宣言します。

+1

+1。バージョン値をソースファイルに入れることは良い考えです。私はバージョン文字列のアクセサー関数とヘッダー(変更する必要はありません)を作ることが有用であることを発見しました。2.メジャー、マイナーなどの値のための別々のフィールドを持つバージョン構造。 –

+0

答えをありがとう、私はこのものと一緒に行きます。申し訳ありませんが遅く受け入れることです。 – Septagram

+0

また、@Dave、そうです。 – Septagram

1

ここに、[scons-users]メーリングリストの回答がいくつかあります。

ブライアンコーディ:我々は sconsの中を通過

1つのコマンドラインオプションが SVNリポジトリ担当者のバージョンです。この数値を define(-DREP_NUM = \ "123 \")に置き、 この番号を使用するC++コードに という文字列を作成します。これはサーバーの実行 ビルドのためのものです。バージョンXYZの誰かの ローカルビルドが必ずしも等しく他の誰かのXYZ は(ウィンドウで、ENVするvar USERNAME は、ログインしたユーザーが含まれていない ないため、ローカルビルドのために、私たちは実際に は、ユーザ名の代わりに、 バージョン番号を使用します)。 その他の考慮点は、 スココン内のコンパイルステートメントのいずれかの部分を変更すると、対象が自動的に であることを意味します。この問題を回避するには、 ビルドシステム は、 が実際にフラグを気にしているオブジェクトターゲットを1つ取り出します。 は、その1つのオブジェクトの コンパイルにのみフラグを渡します。

幸運

ゲイリーOberbrunner:

私はそれがどのバージョンを知っている私のQt/C++アプリケーションをしたいと思います。

役に立つかもしれ http://www.scons.org/wiki/BuildNumberProcessing でいくつかの情報があります。

- - ゲイリー

関連する問題