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>.В командной строке можно указать любое количество параметров или их комбинаций, чтобы искать файлы заголовков в нескольких каталогах. Порядок поиска следующий:
- Для формы директивы включения с кавычками сначала выполняется поиск в каталоге текущего файла.
- Для формы директивы включения с кавычками выполняется поиск в каталогах, заданных параметрами -iquote, в порядке слева направо, в котором они указаны в командной строке.
- Выполняется поиск в каталогах, заданных параметрами -I, в порядке слева направо.
- Выполняется поиск в каталогах, заданных параметрами -isystem, в порядке слева направо.
- Выполняется поиск в стандартных системных каталогах.
- Выполняется поиск в каталогах, заданных параметрами -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