我的中型autotools项目的软件包版本(请参阅AC_INIT
)经常发生变化。当软件包版本发生变化时,我会对整个项目进行不必要的重建,因为PACKAGE_VERSION
和config.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])
答案 0 :(得分:0)
您可以通过在no-define
中的Automake选项中指定AM_INIT_AUTOMAKE
来阻止某些这些符号的定义,但这并不能完全解决您的问题,因为{{1本身不会受到影响。 It is defined by AC_INIT
,据我所知,Autoconf没有提供抑制这一点的机制。
然后,假设您不想调整您的版本控制实践(您的版本号经常变化以致这是一个问题非常奇怪),并且您拒绝接受它的概念#39;在发生版本号更改时执行干净构建的合理策略,我最好的建议是在(重新)生成它之后修补PACKAGE_VERSION
脚本。您需要弄清楚需要做出哪些更改,但是一旦您这样做,我希望您能够编写一个基于configure
- 或sed
的小脚本来在需要的时候做。