Spec-Zone.ru › GCC 8

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 также помечают каталог как системный, чтобы он получал такое же специальное лечение, которое применяется к стандартным системным каталогам.

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

-I-

Разделяет путь include. Этот параметр устарел. Пожалуйста, используйте -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, и добавляет полученный каталог в путь поиска include. -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-8.5.0/gcc/Directory-Options.html

Spec-Zone.ru

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