#macros #version #conflict #autoconf
Вопрос:
Мой configure.ac файл имеет строку, как показано ниже
AC_INIT([myApp], [1.2.3], [dev@company.com])
затем автозаголовок/настройка создаст config.in
, в котором у нас будет 2 макроса, как показано ниже,
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.2.3"
/* Version number of package */
#define VERSION "1.2.3"
Мне также нужно построить sqlite в том же проекте , и файл заголовка sqlite также определяет переменную VERSION
, затем я получил ошибку, как показано ниже
../../config.h:117:17: error: expected unqualified-id before string constant
#define VERSION "1.2.3"
^ ../../SQLiteCpp/include/SQLiteCpp/Database.h:35:21:note: in expansion of macro ‘VERSION’
extern const char* VERSION; ///< SQLITE_VERSION string from the sqlite3.h used at compile time
Я должен вручную изменить config.in чтобы VERSION
каждый раз комментировать макрос, чтобы продолжить сборку. Мои вопросы таковы:
- Почему 2 макроса созданы
config.h
PACKAGE_VERSION
иVERSION
выглядят одинаково, в чем разница? - Как решить эту
VERSION
проблему с конфликтом макроса/переменной?
Спасибо
Ответ №1:
Почему и VERSION
то и PACKAGE_VERSION
другое ? Вероятно, обратная совместимость.
Как избежать определения VERSION
? AM_INIT_AUTOMAKE
Документация на Automake
информационной странице заканчивается абзацем, в котором подробно рассказывается о том, как избежать PACKAGE
и VERSION
быть AC_DEFINE
d:
AM_INIT_AUTOMAKE([... no-define ...])