2.3 Путь поиска
GCC ищет заголовочные файлы в нескольких разных местах. В обычной Unix-системе, если вы не укажете иначе, он будет искать заголовочные файлы, запрошенные с помощью #include <file>, в:
/usr/local/include libdir/gcc/target/version/include /usr/target/include /usr/include
Для программ на C++, он также будет искать в libdir/../include/c++/version в первую очередь. В приведенном выше примере target — это каноническое имя системы, для которой GCC был настроен на компиляцию кода; часто, но не всегда, совпадает с каноническим именем системы, на которой он работает. version — это версия используемого GCC.
Вы можете добавить в этот список опцию командной строки -Idir. Все каталоги, указанные с помощью -I, будут происканы в порядке слева направо, перед стандартными каталогами. Исключением является случай, когда dir уже включен в стандартный поиск. В этом случае опция игнорируется, и порядок поиска системных каталогов остаётся неизменным.
Дублирующиеся каталоги удаляются из цепочек поиска в кавычках и квадратных скобках до слияния двух цепочек в итоговую цепочку поиска. Таким образом, каталог может появиться дважды в итоговой цепочке поиска, если он был указан как в цепочке с кавычками, так и в цепочке с квадратными скобками.
Вы можете запретить GCC искать в стандартных каталогах с помощью опции -nostdinc. Это полезно при компиляции ядра операционной системы или других программ, которые не используют стандартные средства библиотеки C, или самой стандартной библиотеки C. Опции -I не игнорируются, как описано выше, когда активна опция -nostdinc.
GCC ищет заголовочные файлы, запрошенные с помощью #include "file", сначала в каталоге, содержащем текущий файл, затем в каталогах, указанных опциями -iquote, затем в тех же местах, где он искал бы заголовочный файл, запрошенный с помощью угловых скобок. Например, если /usr/include/sys/stat.h содержит #include "types.h", GCC ищет types.h сначала в /usr/include/sys, а затем в обычном пути поиска.
‘#line’ (см. Управление строками) не изменяет представление GCC о каталоге, содержащем текущий файл.
Вы можете поместить -I- в любой точке списка опций -I. Это имеет два эффекта. Во-первых, каталоги, которые появляются перед -I- в списке, ищутся только для заголовочных файлов, запрошенных в кавычках. Каталоги после -I- ищутся для всех заголовочных файлов. Во-вторых, каталог, содержащий текущий файл, не просматривается ни для чего, если только он не совпадает с одним из каталогов, указанных с помощью опции -I. -I- устаревший, следует использовать -iquote вместо него.
-I. -I- не равно отсутствию опций -I вообще и не приводит к такому же поведению для включений «<>», что и включения «""» без специальных опций. -I. ищет заголовочные файлы в текущем рабочем каталоге компилятора. Это может или не может совпадать с каталогом, содержащим текущий файл.
Если вам нужно искать заголовочные файлы в каталоге с именем -, напишите -I./-.
Существуют и другие способы настройки пути поиска заголовочных файлов. Они обычно менее полезны. См. Вызов.
Далее: Заголовочные файлы, используемые один раз, Предыдущее: Операция включения, Вверх: Заголовочные файлы [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-6.5.0/cpp/Search-Path.html