Для _GNU_SOURCE
и, в частности, для автоинструментов, вы можете использовать AC_USE_SYSTEM_EXTENSIONS
(здесь приведена полная ссылка на руководство по автоконфигурации):
- Макрос: AC_USE_SYSTEM_EXTENSIONS
Этот макрос был введен в Autoconf 2.60. Если возможно, включите
расширения на C или Posix на хостах, которые обычно отключают
расширения, как правило, из-за пространства имен соответствия стандартам
проблемы. Это следует вызывать перед любыми макросами, которые запускают C
компилятор. Следующие макросы препроцессора определены где
соответствующим образом:
_GNU_SOURCE
Включить расширения в GNU / Linux.
__EXTENSIONS__
Включить общие расширения в Solaris.
_POSIX_PTHREAD_SEMANTICS
Включить потоковые расширения в Solaris.
_TANDEM_SOURCE
Включить расширения для платформы HP NonStop.
_ALL_SOURCE
Включить расширения для AIX 3 и Interix.
_POSIX_SOURCE
Включите функции Posix для Minix.
_POSIX_1_SOURCE
Включите дополнительные функции Posix для Minix.
_MINIX
Определить платформу Minix. Этот конкретный макрос препроцессора
устарела и может быть удалена в будущем выпуске
Autoconf.
Для _FILE_OFFSET_BITS
вам необходимо позвонить AC_SYS_LARGEFILE
и AC_FUNC_FSEEKO
:
- Макрос: AC_SYS_LARGEFILE
Организация 64-битных смещений файлов, известных как поддержка больших файлов. На некоторых хостах необходимо использовать специальные параметры компилятора для создания программ, которые могут обращаться к большим файлам. Добавьте любые такие параметры в выходную переменную CC
. Определите _FILE_OFFSET_BITS
и _LARGE_FILES
, если необходимо.
Поддержка больших файлов может быть отключена путем настройки опции --disable-largefile
.
Если вы используете этот макрос, убедитесь, что ваша программа работает, даже если off_t
шире, чем long int
, так как это часто встречается, когда включена поддержка больших файлов. Например, неправильно печатать произвольное off_t
значение X
с printf("%ld", (long int) X)
.
LFS представила функции fseeko
и ftello
, чтобы заменить их аналоги C fseek
и ftell
, которые не используют off_t
. Старайтесь использовать AC_FUNC_FSEEKO
, чтобы сделать их прототипы доступными при их использовании, и поддержка больших файлов включена.
Если вы используете autoheader
для генерации config.h
, вы можете определить другие макросы, которые вас интересуют, используя AC_DEFINE
или AC_DEFINE_UNQUOTED
:
AC_DEFINE([FUSE_VERSION], [28], [FUSE Version.])
Определение будет передано в командную строку или помещено в config.h
, если вы используете autoheader. Реальное преимущество AC_DEFINE
состоит в том, что он легко позволяет определения препроцессора в результате проверок конфигурации и отделяет системно-специфический раскол от важных деталей.
При записи файла .c
сначала #include "config.h"
, затем заголовок интерфейса (например, foo.h
для foo.c
- это гарантирует, что заголовок не имеет отсутствующих зависимостей), а затем все остальные заголовки.