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>директивы.Вы можете указать любое количество или комбинацию этих параметров в командной строке для поиска заголовочных файлов в нескольких каталогах. Порядок поиска следующий:
- Для формы директивы include с кавычками, сначала ищется каталог текущего файла.
- Для формы директивы include с кавычками, каталоги, указанные параметрами -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++.)
-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 компоновщик (начиная с версии 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-11.4.0/gcc/Directory-Options.html