Как указать переменную среды, используя флаг rustc-env?

Я хочу установить rustc-env=VAR=VALUE чтобы я мог получить к нему доступ, используя env::var("VAR") в моем коде. Однако мне не ясно, где это указать. Могу ли я установить переменную среды VAR в Makefile?

1 ответ

Решение

Связанная с вами документация предназначена для скрипта сборки Cargo:

Файл Rust, обозначенный build Команда (относительно корня пакета) будет скомпилирована и вызвана до того, как что-либо еще будет скомпилировано в пакете, что позволит вашему коду Rust зависеть от встроенных или сгенерированных артефактов. По умолчанию Cargo ищет "build.rs" файл в корне пакета (даже если вы не указали значение для build). использование build = "custom_build_name.rs" указать пользовательское имя сборки или build = false отключить автоматическое определение скрипта сборки.

На той же странице есть раздел, который описывает выходные данные build.rs

Все строки, выводимые на стандартный вывод сценарием сборки, записываются в файл [...] Любая строка, начинающаяся с cargo: интерпретируется непосредственно Cargo. Эта строка должна иметь вид cargo:key=value, как примеры ниже:

cargo:rustc-env=FOO=bar

Потом детали rustc-env:

rustc-env=VAR=VALUE указывает, что указанная переменная среды будет добавлена ​​в среду, в которой работает компилятор. Затем значение может быть получено env! макрос в скомпилированном ящике. Это полезно для встраивания дополнительных метаданных в код ящика, таких как хэш Git HEAD или уникальный идентификатор сервера непрерывной интеграции.

env! это макрос.

TL; DR

build.rs

fn main() {
    println!("cargo:rustc-env=VAR=VALUE");
}

SRC / main.rs

fn main() {
    let var = env!("VAR");
}

получить доступ к нему с помощью env::var("VAR")

Нет. env::var предназначен для чтения переменных среды, установленных при запуске программы, а не при ее компиляции.

Смотрите также:

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