我的环境是Linux CentOS 6.2。我有一个像svn / hg / git等源代码控制系统。我的源代码是C / C ++。
我想检查构建二进制文件以确保将哪个二进制文件发布给客户。
我认为当源代码发生变化时,构建二进制文件的校验和会有所不同。 所以,我可以反向跟踪从哪个版本构建二进制文件。
有可能,我必须遵循什么样的技巧?
我看到一些可执行文件在使用-version选项执行时会显示修订版本。 但我想知道如何防止将错误的-version字符串写入可执行文件。
如果我保留md5.txt并签入它而不是检入二进制文件。 我怎样才能确保我可以再次构建相同的md5可执行文件?
很抱歉,为了清除我的问题并阻止其他意外答案,我更喜欢这样的答案:
答案 0 :(得分:2)
在.cpp文件中创建字符串,如下所示:
static const char version[] = "@(#) $Id$";
其中$ Id $来自SVN
答案 1 :(得分:0)
这是可执行文件还是共享库?如果是后者,您可以导出一个返回版本的函数(数字,字符串,您的选择)。然后dlopen(),dlsym(),并执行该函数。
对于可执行的ELF二进制文件,您可以在二进制文件中植入一些可以使用'nm'实用程序查询的数据。
答案 2 :(得分:0)
如果您将使用Subversion,SvnRev将为您完成大部分工作(repos中没有md5,repo hold sources,binary-resource with revision-id)
对于Mercurial,您可以从VersioningWithMake wiki获取版本sting的想法,并且为了获得类似git describe的结果的字符串,而不是HGVERSION的简单模板{node | short},您可以使用{{ {1}},显示(示例){latesttag}+{latesttagdistance}:{node|short}