使用 qmake 检索 VS 中的修订号

发布于 2024-08-07 14:41:34 字数 434 浏览 3 评论 0原文

我当前的工作流程:

  1. hg update(或用于检查修订的任何内容)
  2. MyProject.proqmake< /code>MyProject.vcproj
  3. 打开 Visual Studio,编辑文件
  4. 构建项目

在构建步骤中,如何使用信息更新我的 config.h 头文件来自版本控制系统(例如hg id)?

MyProject.vcproj 是由 qmake 生成的,所以我不应该手动编辑它。

My current workflow:

  1. hg update (or whatever one uses to check out a revision)
  2. MyProject.proqmakeMyProject.vcproj
  3. Open Visual Studio, edit files
  4. Build project

During the build step, how can I update my config.h header file with information from version control system (e.g. hg id)?

MyProject.vcproj is generated by qmake, so I shouldn't edit it by hand.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

画中仙 2024-08-14 14:41:34

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

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

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

You can execute external commands from inside qmake. The easiest way to make the information available in your sources would be to use a define:

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

I'm not sure if you can edit an external file from qmake. You could use an external tool, but on Windows you normally don't have things like sed, so it might be a little more problematic.

陌上芳菲 2024-08-14 14:41:34

您可以使用自定义构建目标和 PRE_TARGETDEPS 关键字来实现此目的。假设 config.h.in 具有以下格式:

#define HGID $HGID

您可以定义一个自定义构建目标,该目标将处理 hgid.h.in 并输出到 hgid.h< /code> 在构建主要目标之前,如下所示:

hgid.target = hgid
hgid.commands = sed s/\\\$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid

You can accomplish that using a custom build target and the PRE_TARGETDEPS keyword. Assuming config.h.in has the folowing format:

#define HGID $HGID

You can define a custom build target that will process hgid.h.in and output to hgid.h prior to building your main target as follows:

hgid.target = hgid
hgid.commands = sed s/\\\$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid
苏大泽ㄣ 2024-08-14 14:41:34

一种选择是启用关键字扩展。将类似的内容放入您的 hgrc(或 Mercurial.ini,如果您喜欢的话)中:

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

然后在 config.h 中放入:

#define HGREV "$HGREV$"

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

One opton is to enable the Keyword Extension. Put something like this in your hgrc (or Mercurial.ini if that's your thing):

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

Then in config.h put:

#define HGREV "$HGREV$"

You might need to parse the hex value out of the "$HGREV: deadbeefdeadbeef $" that you'll get, but that's easily done by whatever code is accessing the HGREV define.

风筝有风,海豚有海 2024-08-14 14:41:34

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

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

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

In addition to Lukáš Lalinský and goodrone's comment, I'd like to mention that qmake can link directly to the script, not only to it's output. So one can say

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

and the script will be freshly executed for every single target.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文