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-5.5.0/cpp/Search-Path.html