防止" #define PACKAGE_VERSION"从出现在config.h中

时间:2018-03-28 13:57:07

标签: autotools autoconf m4

我的中型autotools项目的软件包版本(请参阅AC_INIT)经常发生变化。当软件包版本发生变化时,我会对整个项目进行不必要的重建,因为PACKAGE_VERSIONconfig.h中的朋友已经更改,config.h包含在所有源文件中。

实际上只需要一个源文件中的版本,并且我希望将这些定义放在单独生成的标头中,并将其包含在此源文件中。

在属于autoconf的文件general.m4中,我看到以下内容:

m4_define([_AC_INIT_PREPARE],
...
AC_DEFINE_UNQUOTED([PACKAGE_VERSION], ["$PACKAGE_VERSION"],
           [Define to the version of this package.])dnl
AC_DEFINE_UNQUOTED([PACKAGE_STRING], ["$PACKAGE_STRING"],
           [Define to the full name and version of this package.])dnl

属于automake的文件init.m4

AC_DEFUN([AM_INIT_AUTOMAKE],
...
 AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl

我想撤消这三者的影响。 目前,我的configure.ac有以下几行:

AC_INIT(pkgname, [1.2.3])
AC_CONFIG_HEADERS(config.h)
AM_INIT_AUTOMAKE([1.11 parallel-tests -Wno-portability tar-ustar])

1 个答案:

答案 0 :(得分:0)

您可以通过在no-define中的Automake选项中指定AM_INIT_AUTOMAKE来阻止某些这些符号的定义,但这并不能完全解决您的问题,因为{{1本身不会受到影响。 It is defined by AC_INIT,据我所知,Autoconf没有提供抑制这一点的机制。

然后,假设您不想调整您的版本控制实践(您的版本号经常变化以致这是一个问题非常奇怪),并且您拒绝接受它的概念#39;在发生版本号更改时执行干净构建的合理策略,我最好的建议是在(重新)生成它之后修补PACKAGE_VERSION脚本。您需要弄清楚需要做出哪些更改,但是一旦您这样做,我希望您能够编写一个基于configure - 或sed的小脚本来在需要的时候做。