Подтвердить что ты не робот

#ИМЯ?

Если я хочу включить каталоги для поиска файлов заголовков, что является предпочтительным способом и почему?

4b9b3361

Ответ 1

Из документации gcc для -I:

Добавьте директорию каталога в начало списка каталогов для поиска файлов заголовков. Это можно использовать для переопределения файла заголовка системы, подставляя вашу собственную версию, поскольку эти каталоги просматриваются перед каталогами заголовков системных заголовков. Однако вы не должны использовать эту опцию для добавления каталогов, содержащих файлы заголовков систем поставщика (используйте для этого эту -систему). Если вы используете несколько опций -I, каталоги сканируются в порядке слева направо; после этого появятся стандартные системные каталоги.

Если стандартная система включает каталог или каталог, указанный в -системе, также указывается с -I, параметр -I будет проигнорирован. Каталог будет по-прежнему искать, но в качестве системного каталога в его нормальном положении в системе есть цепочка. Это делается для того, чтобы гарантировать, что процедура GCC для исправления багги системных заголовков и порядок для директивы include_next не будут непреднамеренно изменены. Если вам действительно нужно изменить порядок поиска для системных каталогов, используйте параметры -nostdinc и/или -системы.

Так что -I, вероятно, является предпочтительным вариантом для указания местоположения ваших файлов заголовков, за исключением особых случаев, таких как системные заголовки поставщика.

Ответ 2

Один из способов увидеть это - использовать заголовки, которыми вы управляете с помощью -I, и те, которые у вас нет (системные, сторонние библиотеки) с -isystem. Практическое различие возникает, когда предупреждения включаются в том, что предупреждения, которые поступают из заголовков -isystem, будут подавлены.

Ответ 3

Вы должны использовать -I, чтобы указать местоположение ваших заголовков.

Поиск файлов, заданных с помощью -системы, выполняется после того, как -I обрабатывается и получает специальную обработку gcc (так же, как и стандартные системные заголовки).

Ответ 4

Когда вы включаете заголовок "Myheader.h" с использованием -I, компилятор генерирует порядок поиска: "Myheader.h", "system/headers". Поэтому, если что-то не может быть найдено в "MyHeader.h", вы отказываетесь от "системы/заголовков". Однако, когда вы используете -систему, вы в основном говорите, что замените "system/headers" тем, что я вам даю. Таким образом, больше нет возврата к "системе/заголовкам".