我们正在寻找一种在构建中自动包含某种构建ID的方法.这需要是可移植的(VC++,Linux和Mac上的g ++)和自动.VC++是最重要的,因为在其他环境中我们使用自定义Python构建脚本,所以我可以做任何我想做的事情.
我们使用SVN,所以我们正在考虑使用svnversion的输出将修订写入标题并包含它.这有问题:如果我们把文件放在SVN中,它每次都会显示为修改,但它会是一个多余的提交,从某种意义上说会产生一个增加修订的无限循环.如果我们不将文件放在SVN中并仅将其创建为预构建步骤,则源将不完整,因为它们需要预构建步骤或Makefile来生成该文件.
我们也可以使用,__DATE__
但我们不能保证在__DATE__
修改其他文件的情况下编译使用的文件(即将其写入日志文件) - 除非我们"触摸"它,但是我们会导致项目总是过时的.我们可以将它作为预构建步骤触摸,因此只有在项目的其余部分已过时才会触及它,因此不会导致虚假编译,但如果VC++ 在预构建步骤之前计算依赖关系,则不会工作(文件__DATE__
不会被编译)
任何有趣的想法?
我们使用的是输出svnversion
,写入头文件并包含在内.我们从存储库中省略了该文件,并在预构建步骤中创建它; 这对我们来说非常有效.(我不确定你为什么反对使用预构建步骤?)
我们目前正在使用Perl脚本将svnversion
输出转换为头文件; 我后来发现TortoiseSVN包含一个subwcrev
命令(它也被移植到Linux),它可以做很多相同的事情.