LINUX.ORG.RU

autotools: смысл config.h?


0

0

Скрипт configure в результате своей работы (при наличии 
соответствующих макросов в configure.in) создает файл config.h, 
который имеет примерно следующую структуру:

/* Define if you have the ANSI C header files.  */
#define STDC_HEADERS 1

/* Define if you have the atoi function.  */
#define HAVE_ATOI 1

/* Define if you have the atol function.  */
#define HAVE_ATOL 1


Вопрос: в чем смысл данного файла? Очевидны следующие моменты:
1. Определение "констант" (PACKAGE_NAME etc)
2. В зависимости от установленных дефайнов включать свою 
реализацию какой-либо функции (e.g.: #ifndef HAVE_ATOI 
<atoi_own_implementation> #endif)


Насколько корректным, с точки зрения разработки и распространения 
собственного Свободного ПО, является отключение генерации данного 
файла, если оба описанных выше момента, просто-напросто, не используются?

Спасибо.
anonymous

Re: autotools: смысл config.h?

Абсолютно корректным. Можно вообще не юзать autotools, никто ругать за это не будет :)

Virun ()

Re: autotools: смысл config.h?

обычно в config.h по мимо указанного кросплатформенного стафа присутвуют различные константы, используемые в вашей системе a-la DEFAULT_LOG_PATH, DEFAULT_BLABLA_BUFFER_SIZE, DEFAULT_ETC, DEFAULT_WO.

помимо этого, туда можно добавить debug макрос, если configure был передан флаг --with-debug или набор макросов определяющих какие фичи юзеру нужны, а какие нет. i.e. флаги --with-x-feature, --with-y-feature, --without-z-feature могут объявлять соответвующие макросы в config.h.

если вам не нужна кроссплатформенность и вы не собираетесь давать пользователю контроль над сборкой в стиле описанного выше, то напишите набор простых makefil'ов и не морочте себе голову автотулзами.

asgard ()

Re: autotools: смысл config.h?

использование config.h вовсе не обязательно. если не озабачиваться портабельностью, то он нужен только в случаях, когда используются --with-feature для включения дополнительных возможностей

ananas ★★★★★ ()

Re: autotools: смысл config.h?

autoconf собственно для того и предназначен, чтобы можно было проверить, есть какая-то функция или нет. Если ты этим не пользуешься, то лучше выкинь automake и autoconf и напиши Makefile руками - только не забудь про DESTDIR и используй FORCE вместо .PHONY(bsdmake .PHONY не поддерживает - это расширение GNU). Ну и еще пользуйся bindir, libdir и т. п. Все это прекрасно заменяет функции configure и не требует GNU make(бОльшая переносимость).

За подробностями по написанию Makefileов сюда: http://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html#Makefil...

anonymous ()

Re: autotools: смысл config.h?

Спасибо за разъяснения. autotools, все-таки, мне нужны, из-за --with-feature функционала и определения C99-conforming компилятора на стадии configure.

anonymous ()
Ответ на: Re: autotools: смысл config.h? от anonymous

Re: autotools: смысл config.h?

С99 компилятор вроде бы определяется наличием соответствующих макросов, определенных в стандарте.

--with-feature можно заменить вручную набираемым(или как в Linux с помощью меню) файлом .config

Вот Linux же обходится без autoconf: make menuconfig make bzImage ...

Вообще autotools -- неудобно и держит кучу файлов в каталоге программы. Просто это стандарт для пакетов GNU, но не все же стандарты GNU хорошие. Например, GNU поддерживает ужасный формат tar, который не поддерживает длинные имена файлов(в отличие от cpio и pax(насчет pax не уверен)). Утилита echo(да и множество других) из coreutils не соответствует POSIX(echo -e выводит пустую строку, вместо "-e"). getopt без POSIXLY_CORRECT работает вообще неверно.

Вообщем свой Makefile все-же лучше, чем зависеть от autotools. Linux вообще в ядре использует cpio и собирается с помощью своего Makefile.

anonymous ()
Ответ на: Re: autotools: смысл config.h? от anonymous

Re: autotools: смысл config.h?

Наивный...У ядра нету зависимостей, все что ему нужно это компилятор и линковщик, оно самодостаточно, потому и обходится без систем сборки. Без autotools или другой системы сборки ты без изобретения велосипедов портабельную программу никогда не сделаешь. Так то не мели чепуху.

Virun ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.