3.14 Параметры поиска в каталогах
Эти параметры задают каталоги для поиска файлов заголовков, библиотек и частей компилятора:
-
-Idir - Добавить каталог dir в начало списка каталогов для поиска файлов заголовков. Это можно использовать для переопределения системного файла заголовков, заменив его своей собственной версией, так как эти каталоги просматриваются перед каталогами системных файлов заголовков. Однако вы не должны использовать этот параметр для добавления каталогов, содержащих системные файлы заголовков, предоставленные поставщиком (используйте
-isystemдля этого). Если вы используете более одного-Iпараметра, каталоги будут просматриваться слева направо; стандартные системные каталоги следуют за ними.Если стандартный системный каталог включения или каталог, указанный с помощью
-isystem, также указан с помощью-I, параметр-Iигнорируется. Каталог всё равно будет просмотрен, но как системный каталог в его обычном положении в цепочке системных каталогов включения. Это гарантирует, что процедура GCC для исправления ошибочных системных заголовков и порядок для директивыinclude_nextне изменятся непреднамеренно. Если вам действительно нужно изменить порядок поиска системных каталогов, используйте параметры-nostdincи/или-isystem. -
-iplugindir=dir - Установить каталог для поиска плагинов, которые передаются с помощью -fplugin=name вместо -fplugin=path/name.so. Этот параметр не предназначен для использования пользователем, а только передаётся драйвером.
-
-iquotedir - Добавить каталог dir в начало списка каталогов для поиска файлов заголовков только в случае '#include "file"'; они не будут искаться для ‘#include <file>’, в противном случае, как и
-I. -
-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. Это помогает при загрузке компилятора. -
-specs=file - Обработать file после того, как компилятор прочитает стандартный файл
specs, для того чтобы переопределить значения по умолчанию, которые программа-драйверgccиспользует при определении параметров, передаваемыхcc1,cc1plus,as,ldи т. д. В командной строке можно указать несколько параметров -specs=file, и они обрабатываются в порядке следования слева направо. -
--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. Этот параметр отключает добавление такого суффикса. -I-- Этот параметр устарел. Пожалуйста, используйте
-iquoteвместо него для каталогов-Iперед-I-и удалите-I-. Любые каталоги, которые вы указываете с помощью параметров-Iперед параметром-I-, ищутся только для случая ‘#include "file"’; они не ищутся для ‘#include <file>’.Если дополнительные каталоги указаны с помощью параметров
-Iпосле-I-, эти каталоги ищутся для всех директив ‘#include’. (Обычно все каталоги-Iиспользуются таким образом.)Кроме того, параметр
-I-запрещает использование текущего каталога (откуда пришёл текущий входной файл) в качестве первого каталога поиска для ‘#include "file"’. Нет способа переопределить это действие-I-. С помощью-I.вы можете указать поиск в каталоге, текущем при вызове компилятора. Это не совсем то же самое, что делает препроцессор по умолчанию, но часто приемлемо.-I-не запрещает использование стандартных системных каталогов для файлов заголовков. Таким образом,-I-и-nostdincнезависимы.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Directory-Options.html