Как указать переменную среды, используя флаг 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
предназначен для чтения переменных среды, установленных при запуске программы, а не при ее компиляции.
Смотрите также: