3.21 Переменные среды, влияющие на GCC
В этом разделе описаны несколько переменных среды, которые влияют на работу GCC. Некоторые из них задают каталоги или префиксы для поиска различных типов файлов. Другие используются для задания других аспектов среды компиляции.
Обратите внимание, что вы также можете указать места поиска, используя опции, такие как -B, -I и -L (см. Параметры поиска каталогов). Эти опции имеют приоритет над местами, указанными с помощью переменных среды, которые, в свою очередь, имеют приоритет над теми, что указаны в конфигурации GCC. См. Управление драйвером компиляции gcc в GNU Compiler Collection (GCC) Internals.
-
LANG LC_CTYPELC_MESSAGESLC_ALL-
Эти переменные среды контролируют способ использования GCC информации о локализации, что позволяет GCC работать с различными национальными соглашениями. GCC проверяет категории локали
LC_CTYPEиLC_MESSAGES, если оно было сконфигурировано таким образом. Эти категории локали могут быть установлены в любое значение, поддерживаемое вашей установкой. Типичное значение — ‘en_GB.UTF-8’ для английского языка в Соединенном Королевстве, закодированного в UTF-8.Переменная среды
LC_CTYPEзадаёт классификацию символов. GCC использует её для определения границ символов в строке; это необходимо для некоторых многобайтовых кодировок, содержащих кавычки и управляющие символы, которые в противном случае интерпретируются как конец строки или управляющие последовательности.Переменная среды
LC_MESSAGESзадаёт язык для использования в диагностических сообщениях.Если переменная
LC_ALLустановлена, она переопределяет значениеLC_CTYPEиLC_MESSAGES; в противном случаеLC_CTYPEиLC_MESSAGESпо умолчанию принимают значение переменнойLANG. Если ни одна из этих переменных не установлена, GCC использует традиционное поведение C на английском языке. -
TMPDIR -
Если
TMPDIRустановлена, она указывает каталог для временных файлов. GCC использует временные файлы для хранения вывода одного этапа компиляции, который должен быть использован в качестве входных данных для следующего этапа: например, вывода препроцессора, который является входными данными для самого компилятора. -
GCC_COMPARE_DEBUG -
Установка
GCC_COMPARE_DEBUGпочти эквивалентна передаче -fcompare-debug драйверу компилятора. Подробнее см. документацию по этой опции. -
GCC_EXEC_PREFIX -
Если
GCC_EXEC_PREFIXустановлена, она задаёт префикс, используемый в именах подпрограмм, выполняемых компилятором. При объединении этого префикса с именем подпрограммы не добавляется слеш, но вы можете указать префикс, заканчивающийся слешем, если хотите.Если
GCC_EXEC_PREFIXне установлена, GCC пытается определить подходящий префикс, основываясь на пути, с которым оно было вызвано.Если GCC не может найти подпрограмму, используя указанный префикс, оно пытается найти её в обычных местах для подпрограммы.
Значение по умолчанию
GCC_EXEC_PREFIX— prefix/lib/gcc/, где prefix — префикс установленного компилятора. Во многих случаях prefix — это значениеprefixпри запуске скрипта configure.Другие префиксы, указанные с помощью -B, имеют приоритет над этим префиксом.
Этот префикс также используется для поиска таких файлов, как crt0.o, которые используются для линковки.
Кроме того, префикс используется нестандартным способом для поиска каталогов для поиска заголовочных файлов. Для каждого из стандартных каталогов, имя которых обычно начинается с ‘/usr/local/lib/gcc’ (точнее, со значением
GCC_INCLUDE_DIR), GCC пытается заменить это начало на указанный префикс, чтобы получить альтернативное имя каталога. Таким образом, с помощью -Bfoo/, GCC ищет foo/bar перед стандартным каталогом /usr/local/lib/bar. Если стандартный каталог начинается с сконфигурированного prefix, то значение prefix заменяется наGCC_EXEC_PREFIXпри поиске заголовочных файлов. -
COMPILER_PATH -
Значение
COMPILER_PATH— список каталогов, разделённых двоеточием, подобноPATH. GCC перебирает указанные каталоги при поиске подпрограмм, если не может найти подпрограммы, используяGCC_EXEC_PREFIX. -
LIBRARY_PATH -
Значение
LIBRARY_PATH— список каталогов, разделённых двоеточием, подобноPATH. При конфигурации как родной компилятор GCC перебирает указанные каталоги при поиске специальных файлов линковщика, если не может их найти, используяGCC_EXEC_PREFIX. Линковка с помощью GCC также использует эти каталоги при поиске обычных библиотек для опции -l (но каталоги, указанные с -L, имеют приоритет). -
LANG -
Эта переменная используется для передачи информации о локали в компилятор. Один из способов использования этой информации — определение набора символов, который будет использоваться при разборе символьных литералов, строковых литералов и комментариев в C и C++. Когда компилятор настроен на работу с многобайтовыми символами, следующие значения для
LANGраспознаются:- ‘C-JIS’
Распознавать символы JIS.
- ‘C-SJIS’
Распознавать символы SJIS.
- ‘C-EUCJP’
Распознавать символы EUCJP.
Если
LANGне определено или имеет другое значение, компилятор используетmblenиmbtowcпо умолчанию, определённые локалью, для распознавания и перевода многобайтовых символов. -
GCC_EXTRA_DIAGNOSTIC_OUTPUT -
Если
GCC_EXTRA_DIAGNOSTIC_OUTPUTустановлено в одно из следующих значений, то дополнительный текст будет выводиться в stderr при выводе подсказок по исправлению. -fdiagnostics-parseable-fixits и -fno-diagnostics-parseable-fixits имеют приоритет над этой переменной среды.- ‘fixits-v1’
-
Выводить разборные подсказки по исправлению, эквивалентно -fdiagnostics-parseable-fixits. В частности, столбцы выражаются как количество байтов, начиная с байта 1 для начального столбца.
- ‘fixits-v2’
Как
fixits-v1, но столбцы выражаются в колонках отображения, как и в -fdiagnostics-column-unit=display.
Некоторые дополнительные переменные среды влияют на поведение препроцессора.
-
CPATH -
C_INCLUDE_PATH -
CPLUS_INCLUDE_PATH -
OBJC_INCLUDE_PATH -
Значение каждой переменной — список каталогов, разделённых специальным символом, подобно
PATH, в котором искать заголовочные файлы. Специальный символ,PATH_SEPARATOR, зависит от платформы и определяется во время сборки GCC. Для платформ на базе Microsoft Windows это точка с запятой, а для почти всех других платформ — двоеточие.CPATHзадаёт список каталогов, которые будут просматриваться так, как если бы они были указаны с -I, но после любых путей, указанных с -I опциями в командной строке. Эта переменная среды используется независимо от языка, который обрабатывается препроцессором.Остальные переменные среды применяются только при предварительной обработке указанного языка. Каждая задаёт список каталогов, которые будут просматриваться так, как если бы они были указаны с -isystem, но после любых путей, указанных с -isystem опциями в командной строке.
Во всех этих переменных пустой элемент указывает компилятору просмотреть текущий рабочий каталог. Пустые элементы могут появляться в начале или конце пути. Например, если значение
CPATH—:/special/include, это равносильно ‘-I. -I/special/include’. -
DEPENDENCIES_OUTPUT -
Если эта переменная установлена, её значение указывает, как выводить зависимости для Make на основе заголовочных файлов, которые не являются системными, и которые обрабатываются компилятором. Системные заголовочные файлы игнорируются в выводе зависимостей.
Значение
DEPENDENCIES_OUTPUTможет быть просто именем файла, в этом случае правила Make записываются в этот файл, предполагая имя цели из имени исходного файла. Или значение может иметь вид ‘file target’, в этом случае правила записываются в файл file, используя target в качестве имени цели.Другими словами, эта переменная среды эквивалентна сочетанию опций -MM и -MF (см. Параметры, управляющие препроцессором), а также с опциональным ключом -MT.
-
SUNPRO_DEPENDENCIES -
Эта переменная аналогична
DEPENDENCIES_OUTPUT(см. выше), за исключением того, что системные заголовочные файлы не игнорируются, поэтому она подразумевает -M вместо -MM. Однако, зависимость от основного входного файла опускается. См. Параметры, управляющие препроцессором. -
SOURCE_DATE_EPOCH -
Если эта переменная установлена, её значение задаёт временную метку UNIX, используемую вместо текущей даты и времени в макросах
__DATE__и__TIME__, чтобы встраиваемые временные метки стали воспроизводимыми.Значение
SOURCE_DATE_EPOCHдолжно быть временной меткой UNIX, определённой как количество секунд (исключая високосные секунды) с 01 января 1970 г. 00:00:00, представленное в ASCII; идентично выводуdate +%sна GNU/Linux и других системах, которые поддерживают расширение%sв командеdate.Значение должно быть известной временной меткой, такой как последняя дата изменения исходного кода или пакета, и оно должно быть установлено процессом сборки.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Environment-Variables.html