2013-05-23 3 views
0

В руководстве AUTOCONF, следует отметить, чтоКак инкапсулировать определения макросов autotools?

AC_INIT (пакет, версия, [ошибка-отчет], [tarname], [URL])

определяет несколько имен макросов, таких как AC_PACKAGE_NAME и PACKAGE_NAME.

конфигурирование также создает файл конфигурация с определением, как следующее:

определяет HAVE_LIBGMP 1

Как я пишу C++ кода, я нахожу эти макросы раздражают, но полезными. Фактически, это случалось много раз, что мне нужно было связать с библиотекой, которая использует autotools и, таким образом, имеет эти макросы в своих заголовках. Таким образом, ситуация такова, что существует конфликт на заголовки макросов, таких как:

определяют PACKAGE_NAME «библиотеку»

определить PACKAGE_NAME «шахта»

Итак, мне было интересно, если есть способ, чтобы сказать Autotools чтобы определить, по крайней мере, некоторые из этих макросов в какой-то структуры следующим образом:

`struct header_information{ 
static string package_name; 
static bug_report; 
.... 
}` 

, а затем инициализировать его с правильными макроимен. Это решение будет содержать эти инкапсулированные данные и не загрязняет глобальное пространство имен?

+1

Проблема в том, что многие сторонники пакетов неправильно устанавливают 'config.h' и загрязняют глобальное пространство имен. Любой пакет, который устанавливает его 'config.h', должен иметь ошибку, поданную против него. –

ответ

0

Мне кажется, что вы хотите злоупотреблять конфиденциальным конфигурационным файлом конфигурации (config.h) с пакетом-закрытием, который так просто определяет удобное имя макроса, которое вы хотите использовать. Я думаю, что довольно очевидный ответ - «не делай этого», иначе ты сам по себе.

Если я не понимаю вас?

Определения там, чтобы конкретная библиотека могла их использовать. Это не предназначено для включения других вещей. Фактически, большинство вещей в config.h совершенно бесполезны вне конкретного пакета.

Это не означает, что библиотека, к которой принадлежит файл config.h, не может обеспечить то, что вы ищете, путем определения открытой структуры в заголовке, который использует эти переменные. Или, возможно, библиотека, использующая pkg-config (если вы ищете имена пакетов), может предоставить вам некоторую информацию. Но я не думаю, что autotools должны или должны предоставить эту информацию вам.

Смежные вопросы