4

私の現在のワークフロー:

  1. hg update(またはリビジョンのチェックアウトに使用するもの)
  2. MyProject.proqmakeMyProject.vcproj
  3. Visual Studio を開き、ファイルを編集する
  4. ビルド プロジェクト

config.hビルド ステップ中に、バージョン管理システムからの情報 (例) を使用してヘッダー ファイルを更新するにはどうすればよいhg idですか?

MyProject.vcprojによって生成されるqmakeため、手動で編集しないでください。

4

4 に答える 4

4

qmake 内から外部コマンドを実行できます。ソースで情報を利用できるようにする最も簡単な方法は、定義を使用することです。

HGID = $$system(hg id)
DEFINES += HGID=\\\"$$HGID\\\"

qmake から外部ファイルを編集できるかどうかはわかりません。外部ツールを使用することもできますが、通常 Windows には などがないsedため、もう少し問題が生じる可能性があります。

于 2009-10-08T16:38:53.980 に答える
4

これは、カスタム ビルド ターゲットとPRE_TARGETDEPSキーワードを使用して実現できます。config.h.in次の形式があると仮定します。

#define HGID $HGID

次のように、メイン ターゲットをビルドする前に処理hgid.h.inして出力するカスタム ビルド ターゲットを定義できます。hgid.h

hgid.target = hgid
hgid.commands = sed s/\\\$$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid
于 2009-10-09T20:02:18.390 に答える
1

オプションの 1 つは、キーワード表示オプションを有効にすることです。次のようなものを hgrc (または Mercurial.ini の場合は Mercurial.ini) に追加します。

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

次に、config.h に次のように入力します。

#define HGREV "$HGREV$"

取得する "$HGREV: deadbeefdeadbeef $" から 16 進値を解析する必要があるかもしれませんが、HGREV 定義にアクセスしているコードが何であれ、これは簡単に実行できます。

于 2009-10-09T02:49:34.337 に答える
1

Lukáš Lalinský と goodrone のコメントに加えて、qmake はスクリプトの出力だけでなく、スクリプトに直接リンクできることにも言及したいと思います。だから人は言うことができます

DEFINES += REPO_ID=\\\"`./setlocalversion.sh`\\\"

スクリプトはすべてのターゲットに対して新たに実行されます。

于 2010-07-05T14:50:36.933 に答える