我们正在寻找一种方法,在我们的构建中自动包含某种类型的构建ID。这需要可移植(VC++、Linux和Mac上的g++ )和自动化。VC++是最重要的,因为在其他环境中,我们使用定制的Python脚本,这样我就可以做我想做的任何事情。
我们使用SVN,所以我们考虑使用svnversion的输出将修订写到头并包含它。这是有问题的:如果我们将文件放入SVN中,它每次都会显示为修改,但它将是多余的提交,并且在某种意义上会产生一个不断增加的修订的无限循环。如果我们不将文件放在SVN中并将其创建为预构建步骤,那么源就不会完成,因为它们需要预构建步骤或Makefile来生成该文件。
我们也可以使用__DATE__,但我们不能保证使用__DATE__的文件(即将其写入日志文件)将被编译,如果其他文件被修改--除非我们“触摸”它,但是我们会导致项目总是过时。我们可以将其作为预构建步骤进行操作,因此只有当项目的其余部分过期时才会对其进行触摸,因此不会导致虚假的编译,但是如果VC++在预构建步骤之前计算依赖项,这将无法工作( __DATE__的文件不会被编译)。
有什么有趣的想法吗?
发布于 2009-01-02 15:30:02
我们使用svnversion的输出,将其写入头文件并包括在内。我们省略了存储库中的文件,并在构建前的步骤中创建它;这对我们非常有效。(我不知道你为什么反对使用预构建步骤?)
我们目前正在使用Perl脚本将svnversion的输出转换为头文件;后来我发现TortoiseSVN包含一个subwcrev命令(该命令也已移植到Linux),可以完成大部分相同的任务。
发布于 2009-01-02 15:34:57
如果您不喜欢构建所需的不包含在源代码管理中的包含文件的想法,请考虑一个批处理文件或其他构建步骤,该步骤以编程方式创建一个文件/ include,并在您的构建过程中调用svnversion。
基本上生成文件,这样您就不会有一个非版本化和必需的文件。
编辑乔希的潜台词可能是最好的主意。
在实现之前,我编写了自己的hacky工具来做同样的事情--在模板文件中进行替换。
发布于 2009-01-02 15:36:12
它可以很简单,如:
% make -DBUILD_NUMBER=`svnlook youngest /path/to/repo`https://stackoverflow.com/questions/407074
复制相似问题