Как переключаться между разными версиями и тулчейнами Rust с помощью rustup?
Автоматическое переключение тулчейнов с помощью rustup и файлов конфигурации
Вы на правильном пути: использовать rustup default для каждого проекта — это действительно неудобно и чревато ошибками. К счастью, в rustup есть встроенный механизм, который автоматически определяет нужный тулчейн на основе файла rust-toolchain.toml (или rust-toolchain) в корне проекта. Это стандартный и рекомендуемый способ.
Вот как это работает: rustup при каждом вызове rustc, cargo или других инструментов проверяет текущую директорию и все родительские директории на наличие файла rust-toolchain.toml или rust-toolchain. Если такой файл найден, он автоматически использует указанный тулчейн, игнорируя глобальный дефолт.
Шаг 1: Создание файла rust-toolchain.toml (рекомендуемый формат)
Создайте в корне вашего проекта файл rust-toolchain.toml со следующим содержимым:
[toolchain]
channel = "nightly"
# Опционально: можно указать конкретную дату
# channel = "nightly-2024-01-01"
# Или компоненты, которые нужно установить
components = ["rustfmt", "clippy"]
# Или цели для кросс-компиляции
targets = ["wasm32-unknown-unknown"]
Для стабильного тулчейна просто укажите channel = "stable" или конкретную версию, например channel = "1.60.0".
Шаг 2: Как это работает на практике
Предположим, у вас есть два проекта:
/projects/stable_app/— требует стабильный Rust./projects/nightly_app/— требует nightly.
В каждом из них вы создаёте соответствующий файл rust-toolchain.toml. Теперь, когда вы переходите в терминале в папку nightly_app и запускаете cargo build, rustup автоматически переключается на nightly. При переходе в stable_app — на стабильный. Вам больше не нужно вручную менять дефолт.
Шаг 3: Старый формат (rust-toolchain)
Раньше использовался простой текстовый файл rust-toolchain без расширения, в котором просто писали имя канала: nightly или stable. Этот формат всё ещё работает, но rust-toolchain.toml предпочтительнее, так как позволяет задавать компоненты и цели.
Пример для вашего случая
Для проекта, требующего nightly:
# В файле rust-toolchain.toml
[toolchain]
channel = "nightly"
components = ["rustfmt", "clippy"]
Для проекта на стабильной версии 1.60:
# В файле rust-toolchain.toml
[toolchain]
channel = "1.60.0"
Дополнительные советы
- Проверка активного тулчейна: Используйте
rustup show, чтобы увидеть, какой тулчейн активен в текущей директории. - Установка тулчейна, если его нет: Если указанный в файле тулчейн не установлен,
rustupпредложит его установить при первом запускеcargo. - Глобальный дефолт: Вы можете оставить глобальный дефолт на стабильной версии (например,
rustup default stable), а для проектов, которым нужен nightly, использовать файлы конфигурации. Это самый безопасный подход.
Таким образом, вы решаете проблему раз и навсегда: каждый проект сам "говорит" компилятору, какую версию использовать, и вам не нужно думать о ручном переключении.
<<Использование директивы `override` и временное переключение
Если вы не хотите создавать файлы в каждом проекте (например, для быстрого тестирования или одноразовых задач), можно использовать команду rustup override set. Она устанавливает тулчейн для конкретной директории, но не создаёт файл конфигурации — информация хранится в служебных файлах rustup.
Пример:
cd /projects/my_nightly_project
rustup override set nightly
# Теперь в этой папке и всех её подпапках будет использоваться nightly
cargo build
Чтобы увидеть список всех переопределений, выполните:
rustup override list
Для удаления переопределения и возврата к глобальному дефолту используйте:
rustup override unset
Недостаток: В отличие от файла rust-toolchain.toml, переопределение не является частью репозитория — его не увидят другие разработчики. Поэтому для командных проектов или проектов с открытым исходным кодом лучше использовать файл конфигурации. Однако для личных экспериментов или временных задач override очень удобен.
Также вы можете комбинировать оба подхода: использовать файл rust-toolchain.toml для долгосрочных проектов, а override — для быстрых проверок.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги