Две вещи, с которыми вы сталкиваетесь:
- Как отмечалось выше, файловая система в Mac OS нечувствительна к регистру, если вы специально не настроили свою файловую систему так, чтобы она чувствительна к регистру.
- gcc не делает различий между локальными и системными заголовками, включая пути. Когда вы указываете каталог, который будет добавлен к пути через -I, этот каталог будет использоваться для поиска как локальных, так и системных включений. Только когда вы используете -iquote или -I-, каталог пропускается для определения местоположения системы. Кроме того, встроенные каталоги «system include» в пути поиска компилятора всегда ищут локальные включения.
- Обратите внимание, что текущий каталог используется для локальных, но не системных включений. В этом случае, я полагаю, он подхватывает String.h, потому что настройки проекта явно добавляют каталог проекта верхнего уровня в путь включения.
Обходной путь, который я бы предложил вместо переименования ваших включений, - это поместить ваши утилиты в каталог, имя которого является уникальным для вашего проекта, и указать этот каталог в вашей директиве включения. Например:
#include "Josk/String.h"
и убедитесь, что Josk/
сам по себе не входит в ваш путь поиска для включения. Таким образом, вы не застряли с неудобным переименованием, хотя вам, возможно, придется перетасовать некоторые файлы в вашем проекте. Вам также может потребоваться изменить параметры проекта, чтобы убедиться, что родительский каталог этого служебного каталога находится в пути включения.
Еще одна возможность попробовать, если вы видите каталог проекта верхнего уровня, добавленный к пути включения вашего проекта, удалите его. Это должно предотвратить поиск элементов в каталоге проекта верхнего уровня для системных включений.
Наконец, вы также можете избежать этой проблемы в данном конкретном случае, изменив чувствительность к регистру в вашей файловой системе. Однако это может привести к поломке некоторых приложений Mac, поэтому изучите проблему, прежде чем приступить к этому, или выберите том, который больше не используется.