-I dir vs. -isystem dir - PullRequest
       20

-I dir vs. -isystem dir

15 голосов
/ 05 апреля 2010

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

Ответы [ 4 ]

18 голосов
/ 07 апреля 2010

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

7 голосов
/ 05 апреля 2010

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

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

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

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

1 голос
/ 05 апреля 2010

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

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

0 голосов
/ 20 июля 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...