Spec-Zone.ru › GCC 9

3.15 Параметры поиска в каталогах

Эти параметры указывают каталоги для поиска заголовочных файлов, библиотек и частей компилятора:

-I dir
-iquote dir
-isystem dir
-idirafter dir

Добавить каталог dir в список каталогов, которые будут проверяться на наличие заголовочных файлов во время предобработки. Если dir начинается с ‘=’ или $SYSROOT, то ‘=’ или $SYSROOT заменяется префиксом sysroot; см. --sysroot и -isysroot.

Каталоги, указанные с помощью -iquote, применяются только к форме директивы с кавычками, #include "file". Каталоги, указанные с помощью -I, -isystem или -idirafter, применяются к поиску как для директивы #include "file", так и для директивы #include <file>.

Вы можете указать любое количество или комбинацию этих параметров в командной строке, чтобы искать заголовочные файлы в нескольких каталогах. Порядок поиска следующий:

  1. Для формы директивы include с кавычками сначала ищется каталог текущего файла.
  2. Для формы директивы include с кавычками каталоги, указанные параметром -iquote, ищутся слева направо в том порядке, в котором они указаны в командной строке.
  3. Каталоги, указанные параметром -I, сканируются слева направо.
  4. Каталоги, указанные параметром -isystem, сканируются слева направо.
  5. Сканируются стандартные системные каталоги.
  6. Каталоги, указанные параметром -idirafter, сканируются слева направо.

Вы можете использовать -I для переопределения системного заголовочного файла, заменив его вашей собственной версией, поскольку эти каталоги просматриваются перед стандартными системными каталогами заголовочных файлов. Однако вы не должны использовать этот параметр для добавления каталогов, содержащих заголовочные файлы, предоставленные поставщиком; для этого используйте -isystem.

Параметры -isystem и -idirafter также отмечают каталог как системный, чтобы он получал такое же специальное обращение, что и стандартные системные каталоги.

Если стандартный системный каталог включений или каталог, указанный с -isystem, также указан с -I, параметр -I игнорируется. Каталог по-прежнему просматривается, но как системный каталог в его обычном положении в цепочке системных каталогов включений. Это гарантирует, что процедура GCC по исправлению ошибочных системных заголовочных файлов и порядок для директивы #include_next не изменятся непреднамеренно. Если вам действительно нужно изменить порядок поиска по системным каталогам, используйте параметры -nostdinc и/или -isystem.

-I-

Разделить путь включения. Этот параметр устарел. Пожалуйста, используйте -iquote вместо -I каталогов перед -I- и удалите параметр -I-.

Любые каталоги, указанные параметром -I перед -I-, просматриваются только для заголовочных файлов, запрошенных с помощью #include "file"; они не просматриваются для #include <file>. Если дополнительные каталоги указаны с помощью параметров -I после -I-, эти каталоги просматриваются для всех директивы ‘#include’.

Кроме того, -I- запрещает использование каталога текущего файла в качестве первого каталога поиска для #include "file". Нет способа переопределить это действие -I-.

-iprefix prefix

Указать prefix в качестве префикса для последующих параметров -iwithprefix. Если префикс представляет каталог, вы должны включить конечный ‘/’.

-iwithprefix dir
-iwithprefixbefore dir

Добавить dir к префиксу, указанному ранее с помощью -iprefix, и добавить полученный каталог в путь поиска включений. -iwithprefixbefore помещает его в то же место, что и -I; -iwithprefix помещает его туда, где был бы -idirafter.

-isysroot dir

Этот параметр похож на параметр --sysroot, но применяется только к заголовочным файлам (за исключением целей Darwin, где он применяется к заголовочным файлам и библиотекам). Подробности см. в параметре --sysroot.

-imultilib dir

Использовать dir в качестве подкаталога каталога, содержащего целевые заголовочные файлы C++.

-nostdinc

Не искать стандартные системные каталоги заголовочных файлов. Ищутся только каталоги, явно указанные с параметрами -I, -iquote, -isystem и/или -idirafter (и каталог текущего файла, если это необходимо).

-nostdinc++

Не искать заголовочные файлы в стандартных каталогах, специфичных для C++, но продолжать поиск в других стандартных каталогах. (Этот параметр используется при построении библиотеки C++).

-iplugindir=dir

Установить каталог для поиска плагинов, которые передаются параметром -fplugin=name вместо -fplugin=path/name.so. Этот параметр не предназначен для использования пользователем, но только передается драйвером.

-Ldir

Добавить каталог dir в список каталогов для поиска с помощью -l.

-Bprefix

Этот параметр указывает, где найти исполняемые файлы, библиотеки, файлы включения и данные самого компилятора.

Программа-драйвер компилятора запускает одну или несколько подпрограмм cpp, cc1, as и ld. Она пытается использовать prefix в качестве префикса для каждой программы, которую она пытается запустить, как с ‘machine/version/’, так и без него, для соответствующей целевой машины и версии компилятора.

Для каждой подпрограммы, которая должна быть запущена, компилятор-драйвер сначала пытается использовать префикс -B, если он указан. Если это имя не найдено или -B не указано, драйвер пытается использовать два стандартных префикса /usr/lib/gcc/ и /usr/local/lib/gcc/. Если ни один из них не приводит к поиску файла, имя программы без изменений ищется в каталогах, указанных в переменной среды PATH.

Компилятор проверяет, ссылается ли путь, предоставленный параметром -B, на каталог, и при необходимости добавляет разделитель каталога в конце пути.

Префиксы -B, которые фактически указывают имена каталогов, также применяются к библиотекам в компоновщике, потому что компилятор преобразует эти параметры в параметры -L для компоновщика. Они также применяются к файлам включения в препроцессоре, потому что компилятор преобразует эти параметры в параметры -isystem для препроцессора. В этом случае компилятор добавляет ‘include’ к префиксу.

Файл поддержки выполнения libgcc.a также можно искать с помощью префикса -B, если это необходимо. Если его не найдено, пытаются использовать два стандартных префикса, указанных выше, и на этом всё. Файл исключается из компоновки, если его не найдено.

Другой способ указать префикс, аналогичный префиксу -B, заключается в использовании переменной среды GCC_EXEC_PREFIX. См. Переменные среды.

В качестве специальной уловки, если путь, предоставленный -B, имеет вид [dir/]stageN/, где N — число от 0 до 9, то он заменяется на [dir/]include. Это помогает при загрузке компилятора.

-no-canonical-prefixes

Не расширять символические ссылки, не разрешать ссылки на ‘/../’ или ‘/./’, не делать путь абсолютным при формировании относительного префикса.

--sysroot=dir

Использовать dir в качестве логического корневого каталога для заголовочных файлов и библиотек. Например, если компилятор обычно ищет заголовочные файлы в /usr/include и библиотеки в /usr/lib, он вместо этого ищет в dir/usr/include и dir/usr/lib.

Если вы используете этот параметр и параметр -isysroot, то параметр --sysroot применяется к библиотекам, а параметр -isysroot — к заголовочным файлам.

Компоновщик GNU (начиная с версии 2.16) имеет необходимую поддержку этого параметра. Если ваш компоновщик не поддерживает этот параметр, то часть заголовочных файлов параметра --sysroot всё равно работает, но часть с библиотеками — нет.

--no-sysroot-suffix

Для некоторых целей добавляется суффикс к корневому каталогу, указанному с --sysroot, в зависимости от используемых параметров, так что, например, заголовочные файлы могут быть найдены в dir/suffix/usr/include вместо dir/usr/include. Этот параметр отключает добавление такого суффикса.

Далее: Параметры генерации кода, Предыдущее: Параметры компоновки, Вверх: Вызов GCC [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/Directory-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API