gpt4 book ai didi

c++ - 跟踪可执行文件中的代码版本

转载 作者:太空狗 更新时间:2023-10-29 14:40:27 25 4
gpt4 key购买 nike

我有一个用 C++ 编写的合理大小(大约 40k 行)的机器学习系统。这仍在积极开发中,即使我对代码进行更改,我也需要定期运行实验。

我实验的输出被捕获在简单的文本文件中。在查看这些结果时,我想做的是通过某种方式找出生成它的代码的确切版本。我通常同时运行大约 5 到 6 个实验,每个实验的代码版本略有不同。

例如,我想知道一组结果是通过编译文件 A 的版本 1、文件 B 的版本 2 等获得的(我只需要一些标识符,“git describe”的输出在这里就可以了) .

我的想法是在编译二进制文件时以某种方式包含此信息。这样,这可以与结果一起打印出来。

有关如何以一种好的方式完成此操作的任何建议。特别是,有什么好的方法可以用 git 做到这一点吗?

最佳答案

我在构建过程中生成了一个源文件,如下所示:

static const char version_cstr[] = "93f794f674 (" __DATE__ ")";
const char * version()
{
return version_cstr;
}

然后很容易在启动时注销版本。

我最初在命令行上使用了 DEFINE,但这意味着每个版本的更改都由构建系统重新编译——这对一个大项目来说不太好。

这是我用来生成它的 scons 的片段,也许你可以根据你的需要调整它。

# Lets get the version from git
# first get the base version
git_sha = subprocess.Popen(["git","rev-parse","--short=10","HEAD"], stdout=subprocess.PIPE ).communicate()[0].strip()
p1 = subprocess.Popen(["git", "status"], stdout=subprocess.PIPE )
p2 = subprocess.Popen(["grep", "Changed but not updated\\|Changes to be committed"], stdin=p1.stdout,stdout=subprocess.PIPE)
result = p2.communicate()[0].strip()

if result!="":
git_sha += "[MOD]"

print "Building version %s"%git_sha


def version_action(target,source,env):
"""
Generate file with current version info
"""
fd=open(target[0].path,'w')
fd.write( "static const char version_cstr[] = \"%s (\" __DATE__ \")\";\nconst char * version()\n{\n return version_cstr;\n}\n" % git_sha )
fd.close()
return 0

build_version = env.Command( 'src/autogen/version.cpp', [], Action(version_action) )
env.AlwaysBuild(build_version)

关于c++ - 跟踪可执行文件中的代码版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com