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 также помечают каталог как системный, чтобы он получал такое же специальное обращение, как и стандартные системные каталоги.
Если стандартный системный каталог include или каталог, указанный с -isystem, также указан с -I, то параметр -I игнорируется. Каталог все равно будет просматриваться, но как системный каталог в его обычном положении в цепочке системных include. Это делается для того, чтобы процедура GCC по исправлению некорректных системных заголовочных файлов и порядок для директивы
#include_nextне были случайно изменены. Если вам действительно нужно изменить порядок поиска системных каталогов, используйте параметры -nostdinc и/или -isystem. -
-I- -
Разделить путь include. Этот параметр устарел. Используйте -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, и добавить получившийся каталог в путь поиска include. -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-13.3.0/gcc/Directory-Options.html