3.15 Параметры поиска каталогов
Эти параметры задают каталоги для поиска файлов заголовков, библиотек и частей компилятора:
-I dir-iquote dir-isystem dir-idirafter dir-
Добавляет каталог dir в список каталогов, которые будут проверяться при поиске файлов заголовков во время предварительной обработки. Если dir начинается с ‘=’, то ‘=’ заменяется префиксом 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++).
-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. См. Переменные среды.В качестве специального хакерского приема, если путь, заданный -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. Этот параметр отключает добавление такого суффикса.
Следующее: Параметры генерации кода, Предыдущее: Параметры линковки, Наверх: Вызов GCC [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/Directory-Options.html