Spec-Zone.ru › GCC 7

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

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

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

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

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

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

  1. Для формы включения директивы в кавычках сначала проверяется каталог текущего файла.
  2. Для формы включения директивы в кавычках каталоги, указанные параметрами -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-7.5.0/gcc/Directory-Options.html

Spec-Zone.ru

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