跟踪可执行文件中的代码版本
Tracking code versions in an executable
我有一个用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)
您可以在源文件中使用$Id:$
,如果您在.gitattributes
中添加包含该短语的文件并使用选项"ident"(参见gitattributes), Git将用sha1哈希替换它。
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 为什么这两个版本的代码给出不同的输出
- 读取代码中的文件版本值
- 为什么此代码上的排序算法不调用类的交换版本?
- AWS 开发工具包 C++ 代码不适用于发布版本
- 代码在Visual C ++中无法按预期工作(来自bjarne stroustrup编程和原则书籍2n版本的示例)
- 不同版本的设备的代码结构
- 使用FFMPEG代码的RTSP服务器的FFMPEG版本错误
- 如何编写更好、更干净的银行帐户代码版本
- 在避免代码重复和冲突名称的同时,如何实现多个版本的同一算法
- 这两个版本的代码有什么区别
- 代码中定义c++版本的内容是什么
- 如何将VDT的Pade Exp fast_ex()的双重版本的标量代码转换为SSE2?
- collect2:错误:ld 在制作带有代码块的 .so 文件(64 位版本)时返回 1 个退出状态
- 旧版本的Fortran做循环Manova代码
- 在C 中编写一个简单的排序算法以及伪代码版本
- C++在哪里可以获得sha256 openssl的代码版本
- 保存代码版本 (Xcode) 的优雅方式
- 在代码中定义指令来分隔代码版本
- 跟踪可执行文件中的代码版本