3

Subversion キーワードや、アンカーやアンカー記号などの詳細について説明している記事をたくさん読んできましたが、C++ について話している記事はありません。

私は QT クリエーターを使用しており、c++ で svn-version を読み取り、値または文字列 (または任意のデータ型) としてコードを介して渡したいと考えています。

それで、どうすればそれを行うことができますか?

4

3 に答える 3

2

SVNBookのテキストは、おそらくここで関連しています。

新しいユーザーは、$Rev$ キーワードの仕組みに戸惑うことがよくあります。リポジトリにはグローバルに増加する単一のリビジョン番号があるため、多くの人は、この番号が $Rev$ キーワードの値に反映されていると想定しています。ただし、$Rev$ は展開されて、ファイルが更新された最後のリビジョンではなく、ファイルが変更された最後のリビジョンを表示します。これを理解することで混乱は解消されますが、多くの場合フラストレーションが残ります — Subversion キーワードのサポートがない場合、ファイルにグローバル リビジョン番号を自動的に取得するにはどうすればよいでしょうか?

これを行うには、外部処理が必要です。Subversion には、まさにこの目的のために設計された svnversion というツールが同梱されています。作業コピーをクロールし、見つかったリビジョンを出力として生成します。このプログラムといくつかの追加ツールを使用して、そのリビジョン情報をファイルに埋め込むことができます。svnversion の詳細については、「svnversion」というセクションを参照してください。

私のプロジェクトではsvnversion、主にソース ツリーが巨大で、このコマンドに非常に時間がかかるように思われたため、最終的に を使用しませんでした。しかし、リビジョン番号をソフトウェアに取り込むために、似たようなものに行き着きました。configureスクリプトは次のコマンドを実行します

svn info . > svn_revision

これは、svn リポジトリからチェックアウトされたディレクトリからコマンドが実行されることを前提としています。このデータを解析するために、さまざまな文字列を定数に grep する Makefile があります。

SVN_REV = $(shell cat svn_revision | grep "Last Changed Rev" | cut -f4 -d\ )                                              

これは、私が呼び出すテンプレート ファイルを介して供給されます。それをファイルversion.cc.templateに変換する Makefile ルールがあります。.cc

version.cc: version.cc.template /svn_revision
        sed -e "s/REVISION/$(SVN_REV)/" version.cc.template > $@                                     

だから私はこのようなものになります

version.h

namespace project {

extern const char* Revision;
extern const unsigned int SvnRevision;

}

version.cc

namespace project {

const char* Revision = "1234";
const unsigned int SvnRevision = 1234;

}

あなたのversion.cc場合、ファイルは必要ないかもしれません。定数はヘッダーでも定義できます。

于 2013-04-04T16:00:31.990 に答える
2

system() コマンド qt c++ の出力を取得するには?

受け入れられた答えが言うように、QProcessを使用してシステム端末からコマンドを実行し、終了するのを待ってからコマンドのテキストを取得できます。

于 2013-04-04T16:08:27.230 に答える
0

ご協力いただきありがとうございます。実は、私はそれを行う別の方法を見つけました。この質問を参照してください:

コマンドラインを QMake #DEFINE に渡す方法

于 2013-04-08T21:28:07.310 に答える