我的中型自动工具项目的软件包版本(请参阅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
在属于汽车的文件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
本身会不受影响。它是由AC_INIT
定义的,据我所知,AutoConf没有提供抑制它的机制。
假设您不想调整版本练习(奇怪的是,您的版本编号如此频繁地变化以至于这是一个问题(,并且您拒绝这样的观念,即执行执行一个合理的政策每当发生版本编号更改时,清洁构建,我最好的建议是在(重新(生成后修补configure
脚本。您需要弄清楚需要进行哪些更改,但是一旦这样做,我希望您能够在需要时编写一个很小的sed
-或基于awk
的脚本。