3.22 Переменные среды, влияющие на GCC
В этом разделе описаны несколько переменных среды, влияющих на работу GCC. Некоторые из них задают каталоги или префиксы, используемые при поиске различных типов файлов. Другие служат для задания иных аспектов среды компиляции.
Обратите внимание, что места для поиска также можно задавать с помощью таких параметров, как -B, -I и -L (см. Параметры поиска каталогов). Они имеют приоритет над местами, заданными с помощью переменных среды, а те, в свою очередь, имеют приоритет над местами, заданными конфигурацией GCC. См. раздел Управление драйвером компиляции gcc в документе «Внутреннее устройство коллекции компиляторов GNU (GCC)».
-
LANG LC_CTYPELC_MESSAGESLC_ALL-
Эти переменные среды управляют использованием GCC сведений о локали, которые позволяют GCC работать с различными национальными соглашениями. GCC проверяет категории локали
LC_CTYPEиLC_MESSAGES, если он был настроен для этого. Для этих категорий локали можно задать любое значение, поддерживаемое вашей системой. Типичное значение для английского языка Великобритании в кодировке UTF-8 — ‘en_GB.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 Jan 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-15.3.0/gcc/Environment-Variables.html