Почему я не могу явно `-I / usr / include`? - PullRequest
0 голосов
/ 22 ноября 2018

Кажется, что и gcc, и clang молча отбрасывают /usr/include из списка включаемых каталогов при явном включении через -I.Есть ли конкретная причина, по которой обычные компиляторы, по-видимому, не позволяют включать системный каталог include?


background:

Предположим, вы зависите отфайл заголовка, расположенный в /usr/include, унаследовав каталог, содержащий несовместимую версию этого же заголовка, от вашей системы сборки через переменную среды CPATH (фактически добавив этот каталог в список -I справа).

1 Ответ

0 голосов
/ 22 ноября 2018

GCC игнорирует -I/usr/include, поскольку по умолчанию это каталог системного заголовка, а использование -I превратит его в не системный заголовок, что приведет к путанице, особенно с системными заголовками, которые не полностью соответствуют языковым стандартам.(GCC дает системным заголовкам большую широту и подавляет, например, предупреждения.)

Если вы используете -isystem /usr/include, то /usr/include перемещается в начало списка поиска.Однако вам, скорее всего, придется переместить и другие записи пути поиска по умолчанию, чтобы не ломать слишком много вещей.gcc -v напечатает весь путь поиска.

...