使用qmake检索VS中的修订号

时间:2009-10-08 12:06:32

标签: c++ visual-studio qt mercurial qmake

我目前的工作流程:

  1. hg update (或用于查看修订版的任何内容)
  2. MyProject.pro qmake MyProject.vcproj
  3. 打开Visual Studio,编辑文件
  4. 构建项目
  5. 在构建步骤中,如何使用版本控制系统中的信息更新我的config.h标头文件(例如 hg id )?

    MyProject.vcproj qmake 生成,因此我不应手动编辑。

4 个答案:

答案 0 :(得分:4)

您可以从qmake内部执行外部命令。在源中提供信息的最简单方法是使用define:

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

我不确定你是否可以编辑qmake的外部文件。您可以使用外部工具,但在Windows上,您通常没有sed之类的内容,因此可能会出现问题。

答案 1 :(得分: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

答案 2 :(得分:1)

一个opton是启用Keyword Extension。把这样的东西放在你的hgrc(或Mercurial.ini,如果这是你的东西):

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

然后在config.h中输入:

#define HGREV "$HGREV$"

您可能需要解析您将获得的“$ HGREV:deadbeefdeadbeef $”中的十六进制值,但这可以通过访问HGREV定义的任何代码轻松完成。

答案 3 :(得分:1)

除了LukášLalinský和goodrone的评论之外,我还想提一下qmake可以直接链接到脚本,而不仅仅是它的输出。所以可以说

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

并且将为每个目标重新执行脚本。