Настройка Cargo

В данном документе мы расскажем вам, как работает настройка Cargo, используя доступные для конфигурации ключи и настройки. Для настройке проекта с помощью манифест файла, загляните на страницу формат манифеста.

Иерархическая структура

Cargo позволяет делать настройки как для локальных проектов, так и для всех (как git, например). Cargo также расширяет эту возможность используя иерархическую структуру. Если, например, Cargo будет вызван в директории /home/foo/bar/baz, то поиск конфигурационных файлов будет осуществлен по следующим директориям:

Благодаря такой структуре вы можете указывать конфигурацию для каждого проекта отдельно, и даже, возможно, добавлять его в вашу систему контроля версий. Вы также можете указать нужную вам конфигурацию в файле в домашней директории.

Формат конфигурационного файла

Все конфигурационные файлы хранятся в TOML формате (как манифесты), в простом формате ключ-значение, которые хранятся внутри секций (таблиц), а потом будут объединены.

Ключи для конфигурации

Все последующие ключи являются опциональными. Также стоит ответить, что мы указывали значения по умолчанию для каждого значения.

Ключи для значений, которые указывают на определенную программу, могут быть в формате абсолютного пути, относительного, а также можно просто указать название программы. Абсолютные пути и название программ используются как есть. Относительные пути используются исходя из родительской директории, в которой расположена директория .cargo, в которой находится конфигурационный файл.

# Массив путей к локальным репозиториям, которые будут переопределены в качестве
# зависимостей. Для более подробной информации смотрите документ Specifying Dependencies.
paths = ["/path/to/override"]

[cargo-new]
# Настройки для имени/email, которые будут помещены в блок `authors` в новых Cargo.toml
# Если эти параметры не указаны, будут взяты параметры из конфигурации `git`. А, если и их нет
# запишутся `$USER` и `$EMAIL`.
name = "..."
email = "..."

# По умолчанию команда `cargo new` создан новый Git репозиторий. Это значение может быть
# изменено на `hg`, тогда будет создан Mercurial репозиторий, или `none`, чтобы отключить
# данный функционал.
vcs = "none"

# Для следующего раздела, $triple относится к любой возможной целевой платформой,
# не к строкову литералу "$triple", и будет применяться каждый раз, когда будет сборка
# для целевой платформы.
[target]
# Для сборок Cargo, для которых не указан параметр --target, будет использован компоновщик
# переданный в rustc (с помощью `-C linker=`). По умолчанию этот флаг не передан
# как параметр компилятора.
linker = ".."

[target.$triple]
# Этот раздел похож на раздел, который был описан выше, но тут указывается конкретная
# целевая платформа, которая будет скомпилирована.
linker = ".."
# пользовательские настройки будут переданы в компилятор, каждый раз когда будет $triple
# вызвана компиляция для целевой платформы.
# этот параметр переопределит build.rustflags, если он указан
rustflags = ["..", ".."]

# Настройки для реестра
[registry]
index = "..."   # Ссылка для индекса реестра (по умолчанию - центральный репозиторий)
token = "..."   # Ключ доступа (можно найти на сайте центрального репозитория)

[http]
proxy = "..."       # HTTP прокси. Используется для HTTP запросов (по умолчанию не указан)
timeout = 60000     # Таймаут для каждого HTTP запроса, в миллисекундах
cainfo = "cert.pem" # Путь до ключа Центра Сертификации (опционально)

[build]
jobs = 1                  # количество параллельно выполняемых заданий, по умолчанию - 
                          # количество ЦП
rustc = "rustc"           # компилятор rust
rustdoc = "rustdoc"       # инструмент генерации документации
target = "triple"         # build for the target triple
target-dir = "target"     # путь к директории, в которой будет скомпилированный проект
rustflags = ["..", ".."]  # настройки, которые будут переданы компилятору

[term]
verbose = false        # предоставлять ли cargo развернутый вывод
color = 'auto'         # предоставлять ли cargo цветной вывод

# Конфигурация сети
[net]
retry = 2 # сколько раз будет вызвана попытка повторной отправки сигнала

# Псевдонимы для команд Cargo. Первые 3 псевдонима встроены.
# Если вы хотите передать параметры в псевдоним, в которых есть пробелы, то используйте список.
[alias]
b = "build"
t = "test"
r = "run"
rr = "run --release"
space_example = ["run", "--release", "--", "\"command list\""]

Переменные среды

Cargo также можно настроить с помощью переменных среды, в дополнение к TOML конфигурационным файлам. Для каждой настройки foo.bar есть переменная среды CARGO_FOO_BAR для которой также можно указать значение. Например, настройка build.jobs может быть указана с помощью переменной среды CARGO_BUILD_JOBS.

Приоритет переменных среды выше, чем приоритет значений в TOML конфигурациях. В данный момент в качестве значений для переменных среды можно указывать только целочисленные, логические и строковые.

В дополнение к вышеперечисленному, Cargo работает и с другими переменными среды.