Spec-Zone.ru › GCC 15

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

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

-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. Для формы директивы включения с кавычками сначала выполняется поиск в каталоге текущего файла.
  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++.)

--embed-dir=dir

Добавляет каталог dir в список каталогов поиска для директивы предварительной обработки #embed или макроса __has_embed. Для #embed каталоги по умолчанию не заданы.

Если dir начинается с «=» или $SYSROOT, то «=» или $SYSROOT заменяется префиксом sysroot; см. --sysroot и -isysroot.

-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. См. Переменные окружения, влияющие на GCC.

В качестве особого обходного решения, если путь, заданный параметром -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 linker (начиная с версии 2.16) предусмотрена необходимая поддержка этого параметра. Если ваш компоновщик не поддерживает этот параметр, часть --sysroot, относящаяся к файлам заголовков, всё равно работает, а часть, относящаяся к библиотекам, — нет.

--no-sysroot-suffix

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

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

Spec-Zone.ru

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