Предотвратить появление #define PACKAGE_VERSION в config.h

Версия пакета (см. AC_INIT) моего среднего проекта autotools довольно часто меняется. При изменении версии пакета я мучаюсь от ненужной пересборки всего проекта, потому что PACKAGE_VERSION и друзья в config.h изменились, а config.h включен во все исходники.

На самом деле версия требуется только в одном исходном файле, и я хотел бы поместить эти определения в отдельный сгенерированный заголовок и включить его в этот исходный файл.

В файле general.m4, принадлежащем autoconf, я вижу следующее:

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, принадлежащем automake:

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])

person basin    schedule 28.03.2018    source источник
comment
Возможный дубликат Чтение номера версии из файла в конфигурации .ac   -  person ldav1s    schedule 30.03.2018


Ответы (1)


Вы можете предотвратить определение некоторых из этих символов, указав no-define среди параметров Automake в AM_INIT_AUTOMAKE, но это не решит вашу проблему полностью, поскольку сам PACKAGE_VERSION не будет затронут. Это определено AC_INIT, и, насколько мне известно, Autoconf не предоставляет механизма для подавления этого.

Предположим, что вы не хотите корректировать свои методы управления версиями (очень странно, что номер вашей версии меняется так часто, что это является проблемой), и что вы отвергаете представление о разумной политике выполнения чистой сборки всякий раз, когда происходит изменение номера версии, моя лучшая рекомендация — исправить скрипт configure после его (повторного) создания. Вам нужно будет решить, какие изменения необходимо внести, но как только вы это сделаете, я ожидаю, что вы сможете написать крошечный скрипт на основе sed или awk, чтобы делать это всякий раз, когда это необходимо.

person John Bollinger    schedule 29.03.2018