如何将 Mercurial 标签嵌入到我的 C/C++ 中代码?

发布于 2024-08-20 21:18:15 字数 268 浏览 4 评论 0原文

我想知道是否有办法将 Mercurial 标签嵌入到我的 C/C++ 代码中。

基本上,我希望将最终成为版本号 (major.minor.rev) 的标记字符串作为静态字符串自动插入到我的 C 代码的确定位置。

总体目标是,当使用“-v”命令行参数执行时,可以查询应用程序的版本号。任何不涉及尝试嵌入 Mercurial 标签的替代方法也将作为答案受到欢迎。

我在 Linux 环境上使用 Code::Blocks,因此该解决方案不能依赖 Visual Studio 功能。

I would like to know if there is a way to embed Mercurial tags into my C/C++ code.

Basically I would like the tag string, which will end up being a release number (major.minor.rev), to be automatically inserted in a determined location of my C code as a static string.

The overall objective is that the application could be queried about its version number when executed with say a '-v' command line argument. Any alternative approach that doesn't involve trying to embed a Mercurial tag will be also welcomed as an answer.

I am using Code::Blocks on a Linux environment, so the solution can not rely on Visual Studio features.

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

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

发布评论

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

评论(2

不羁少年 2024-08-27 21:18:15

您将需要 关键字扩展 来允许扩展关键字条目,它与 Mercurial 捆绑在一起。

例如,要获得对 $Id$ 的支持,您可以为您的存储库编辑 hgrc (.hg/hgrc) 并添加:

[extensions]
keyword =

[keyword]
# Enable expansion for the specific files
myfile.cpp =
# Enable for all .h files
**.h =

然后运行

hg kwexpand

相关文件中的关键字,或者

hg kwshrink

以扩展 缩小关键词。您甚至可以通过添加[keywordmaps]条目来创建自己的关键字,例如

[keywordmaps]
User = {author|user}

注意:这会禁用内置关键字

有关扩展程序的更多详细信息,请参见维基

You will need the keyword extension to allow expansion of keyword entries, it is bundled with mercurial.

For instance to get support for $Id$ you could edit hgrc for you repo (.hg/hgrc) and add:

[extensions]
keyword =

[keyword]
# Enable expansion for the specific files
myfile.cpp =
# Enable for all .h files
**.h =

Then run

hg kwexpand

to expand keywords the relevant files, or

hg kwshrink

to shrink keywords. You can even create your own keywords by adding the [keywordmaps] entry, e.g.

[keywordmaps]
User = {author|user}

Note: This disables the builtin keywords

More details on the extension can be found in the wiki.

失与倦" 2024-08-27 21:18:15

我们使用一个宏来让

#define CVS(a) static const volatile char *rcsid = a;

....
CVS("$Id$")

CVS 自动扩展 $Id$。我认为这也是 Mercurial 标签的工作原理。

然后我们可以使用 strings 命令来查找可执行文件/库等中每个文件的确切版本。

您可以使用类似的命令。

static const volatile char *rcsid = "$Id"; //or whatever mercurial tag you want

int main() {

    .....
    std::cout << "Version is " << rcsid << std::endl;
}

We use a macro for this

#define CVS(a) static const volatile char *rcsid = a;

....
CVS("$Id$")

CVS automagically expands $Id$. I assume this is what mercurial tags work as well.

Then we can use the strings command to find the exact version of each file in the executable / library etc.

You could use something similar.

static const volatile char *rcsid = "$Id"; //or whatever mercurial tag you want

int main() {

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