Должен ли DEVELOPER_DIR оставаться установленным в среде?

Я хотел бы иметь параллельную установку XCode и использовать DEVELOPER_DIR переменная окружения для выбора между ними. Цель этого состоит в том, чтобы использовать результат xcrun -f --sdk macosx clang определить подходящий компилятор Си, а затем использовать его в скрипте или системе сборки.

CC=$(DEVELOPER_DIR=<something> xcrun -f --sdk macosx clang)

Мой вопрос DEVELOPER_DIR должен оставаться установленным при использовании инструментов, найденных xcrunили можно ли просто установить его во время выполнения xcrun, как это сделано выше, а затем использовать возвращенные инструменты в среде по умолчанию, без DEVELOPER_DIR все еще установлено.

Другими словами, пока xcrun явно зависит от стоимости DEVELOPER_DIRсами инструменты от этого тоже зависят? Есть ли значимая разница между:

  • DEVELOPER_DIR=<whatever> command CC=$(xcrun -f --sdk macosx clang)
  • command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)

Второй правильный? Или только первый?

1 ответ

Я хотел бы иметь параллельную установку XCode и использовать переменную среды DEVELOPER_DIR для выбора между ними.

Хорошо иметь две или более версии Xcode. Обычный способ выбора между ними заключается в использовании xcode-select команда, но страница руководства для этой команды, кажется, говорит, что вы можете сделать то же самое для текущего сеанса, установив DEVELOPER_DIR переменная окружения самостоятельно. Вот что документация для --switch вариант говорит:

Устанавливает активный каталог разработчика по указанному пути, например /Applications/Xcode-DP.app. Эта команда должна выполняться с разрешениями суперпользователя (см. Sudo(8)) и повлияет на всех пользователей в системе. Чтобы задать путь без полномочий суперпользователя или только для текущего сеанса оболочки, используйте вместо этого переменную среды DEVELOPER_DIR (см. ENVIRONMENT).

Тем не менее, вы также должны прислушиваться к советам, данным в разделе ОКРУЖАЮЩАЯ СРЕДА

Обратите внимание, что по исторической причине каталог разработчика считается каталогом контента разработчика в приложении Xcode (например, /Applications/Xcode.app/Contents/Developer). Вы можете установить переменную окружения либо в фактический каталог содержимого Developer, либо в каталог приложения Xcode - при условии выбора кода предоставленные shims автоматически преобразуют переменную среды в полный путь содержимого Developer.

Итак <whatever> в вашем вопросе следует указать полный путь к Developer каталог, а не только к приложению Xcode.

Другими словами, хотя xcrun явно зависит от значения DEVELOPER_DIR, сами инструменты тоже зависят от него? Есть ли значимая разница между:

DEVELOPER_DIR=<whatever> command CC=$(xcrun -f --sdk macosx clang)

С помощью xcrun найти инструменты, чтобы вы могли вызывать их самостоятельно и беспокоиться о том, когда устанавливать и отключать DEVELOPER_DIR кажется слишком сложным. В соответствии с xcode-select документация, все "прокладки" уважают DEVELOPER_DIR установка. "Шимс" здесь относится к командам XCode в /usr/bin, Пока эта переменная окружения установлена ​​правильно, вы можете просто вызывать '/usr/bin/clang' вместо чего угодно xcrun находит и /usr/bin/clang перезвоню clang версия в DEVELOPER_DIR, Предположительно, вы задаете этот вопрос, потому что вы пишете какой-то сценарий сборки, поэтому не должно быть проблем с настройкой DEVELOPER_DIR в начале этого сценария, а затем просто с помощью /usr/bin команды.

command CC=$(DEVELOPER_DIR=<whatever> xcrun -f --sdk macosx clang)

Программы наследуют среду от своих родительских процессов. Здесь вы найдете правильную копию clang использовать, но вы будете вызывать его в среде, где DEVELOPER_DIR не установлен Имеет ли это значение, зависит от того, вызывает ли используемый вами инструмент какие-либо другие инструменты. Честно говоря, я не знаю, вызывают ли какие-либо инструменты другие инструменты, но кажется логичным, что такой инструмент, как xcodebuild будет вызывать многие из этих инструментов и, следовательно, зависит от DEVELOPER_DIR устанавливается правильно.

Короче говоря, нет никаких недостатков в настройке DEVELOPER_DIR по мере необходимости в вашем сценарии сборки, и пытаясь указать его только в вашем вызове xcrun кажется менее надежным в целом, чем альтернативный подход.

Другие вопросы по тегам