Spec-Zone.ru › GCC 12

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

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

-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-12.2.0/gcc/Directory-Options.html

Spec-Zone.ru

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