Должен ли 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
кажется менее надежным в целом, чем альтернативный подход.