防止“#define PACKAGE_VERSION”出现在 config.h 中

Prevent "#define PACKAGE_VERSION" from appearing in config.h

我的 medium-sized autotools 项目的包版本(参见 AC_INIT)经常更改。当包版本更改时,我会遭受整个项目不必要的重建,因为 PACKAGE_VERSIONconfig.h 中的朋友已经更改并且 config.h 包含在所有源文件中。

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

在属于 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])

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

然后,假设您不想调整您的版本控制实践(您的版本号变化如此频繁以至于这是一个问题,这很奇怪),并且您拒绝接受这样的观点,即这是一个合理的策略每当版本号发生变化时执行干净的构建,我最好的建议是在(重新)生成它之后修补 configure 脚本。您需要弄清楚需要进行哪些更改,但一旦完成,我希望您能够编写一个基于 sedawk 的小型脚本,以便在需要时执行此操作.