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

Почему установка инструментов командной строки Xcode изменила то, что сообщает "gcc -version"

Недавно я обновил Xcode на OS 10.9 до версии 5.0.1 через AppStore. Мне показалось, что это обновление также обновило инструменты командной строки, например, выполнив gcc --version

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

Однако ответы здесь на SE указывают, что это не так, и что инструменты командной строки нужно загружать и устанавливать отдельно. Я сделал это и закончил с теми же версиями инструмента, но с небольшими различиями. Например, при запуске gcc --version выполняется

gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

Это то, как все должно работать - это означает ожидаемое поведение для текущих инструментов командной строки Xcode или это характерно для установки путем прямой загрузки (против установки вместе с Xcode через AppStore, если это возможно)?

И какое значение имеет изменение от /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 до /usr/include/c++/4.2.1?

4b9b3361

Ответ 1

Я структурирую свой ответ со списком, чтобы вы получили полную картину, и ответ на ваш главный вопрос заключался в последнем элементе списка:

  • Поскольку Mavericks, набор компиляторов по умолчанию был Clang/LLVM вместо GNU GCC. Синонимы для gcc и g++, которые указывают на Clang и Clang++ соответственно, сохраняются для сохранения обратной совместимости, и поскольку Clang очень обратная совместимость с GCC, нет причин не делать этого.
  • Поскольку XCode 6, я думаю, XCode автоматически связывает инструменты разработки командной строки в основной установке и пакете .app для XCode. То же самое касается стандартных фреймворков и наборов инструментов. Полная разработка командной строки по-прежнему не полностью работоспособна на данный момент, просто включила развитие XCode.
  • Однако для успешной разработки в командной строке необходимо выполнить xcode-select --install в приложении "Терминал" и следовать инструкциям.
  • Учитывая, что SDK теперь объединены и организованы в структуре каталогов внутри пакета XCode.app, изменение в gxx-include-dir, которое вы заметили, связано с тем, что теперь /usr/include является просто софт-ссылка теперь в нужное место для конкретного включает:

    $ls -l/usr/include

    lrwxr-xr-x 1 корневое колесо 112 2 февраля 19:08/usr/include → /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/USR/включать/

Последняя точка, не обязательно плохо, и теперь команда xcode-select(1) может использоваться для управления активным SDK. Надеюсь, это немного изменит ситуацию для тех, кто смутился, поскольку все эти (довольно большие) изменения были выпущены в классическом стиле Apple в полной и полной тишине.