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-10.5.0/gcc/Directory-Options.html