使用自动工具将版本信息维护在一个中央位置

时间:2018-06-20 18:30:01

标签: autotools autoconf automake

我使用gnu autools(autoconf,automake,libtool)构建共享库和关联的二进制文件以及texinfo文档。

configure.ac中维护着一个版本信息。

例如,现在在texinfo源代码中,我想包括当前版本。

 @set VERSION 0.0.1
 @set UPDATED 18 June 2018

我只想定义一次版本,并在适用的情况下在整个代码库中重复使用它们,因此,在捆绑发行版时,我最终不会遇到错误版本的pdf。是否有已建立的模式?

1 个答案:

答案 0 :(得分:4)

  

我只想定义一次版本,并在整个过程中重复使用它们   代码库(如果适用),因此在捆绑发行版时,我不会结束   例如,PDF版本错误。有没有   确定的模式吗?

好的。正如您已经观察到的,configure.ac包含版本信息,实际上,它通常在最顶端指定作为AC_INIT宏的参数。从中构建的configure脚本的主要功能是通过用已知或发现的值填充模板文件来构建构建中使用的其他文件。以这种方式准备的最常见文件是Makefile,但是Autotools configure脚本绝不是特定于这些文件的。他们可以以相同的方式准备标题,文档文件以及几乎任何其他可以作为文本处理的文件。

例如,如果您想自动将内部版本号或版本号编码,则可以通过管理包含该信息的头文件来实现。

要使其工作,只需在AC_CONFIG_FILES宏的参数中命名要构建的文件(如果需要,可以使用多个):

AC_CONFIG_FILES([src/version.h])

默认情况下,configure将期望通过添加后缀.in src/version.h.in)来命名该输出文件的模板。在其中,按名称引用Autoconf输出变量,并以'@'字符为界:@VERSION@。当configure运行时(或实际上在生成的脚本config.status运行时),它将通过复制模板,用发现的输出变量值替换输出变量引用来创建指定的输出文件。

由于许多情况下您想要填充版本信息的情况都相似,因为可配置部分仅占整个文件的很小一部分,因此利用Texinfo的@include之类的功能来隔离可配置部分通常很方便部分放在单独的小文件中。标头示例演示了这一点。

尤其是对于texinfo,Automake在这些行中包括a special provision,以获取texinfo源文件中的版本信息。如果您在TEXINFO主文件中命名一个.texi源文件,并且该文件@include的名称与全域vers*.texi相匹配,则Automake将安排该文件自动生成(除非您将根据您自己的规则进行构建)。因此,在特定的texinfo版本控制中,使用该工具生成和合并版本数据比滚动自己的版本文件生成更可取。