mrjbom
@mrjbom

Как идентифицировать target в build.rs?

Есть такой build.rs
fn main() {
    #[cfg(all(target_arch = "x86_64", target_vendor = "unknown", target_os = "none"))]
    {
        println!("cargo:warning={}", "x86_64-unknown-none");
    }
    #[cfg(not(all(target_arch = "x86_64", target_vendor = "unknown", target_os = "none")))]
    {
        println!("cargo:warning={}", "NOT x86_64-unknown-none");
    }
    println!("cargo:warning=Target arch: {:?}", std::env::var("CARGO_CFG_TARGET_ARCH"));
    println!("cargo:warning=Target vendor: {:?}", std::env::var("CARGO_CFG_TARGET_VENDOR"));
    println!("cargo:warning=Target os: {:?}", std::env::var("CARGO_CFG_TARGET_OS"));

    #[cfg(target_arch = "x86_64")]
    println!("arch true");
    #[cfg(target_vendor = "unknown")]
    println!("vendor true");
    #[cfg(target_os = "none")]
    println!("os true");
}


Проблема в том, что при использовании команды cargo b --target x86_64-unknown-none я всё равно получаю
warning: test_x86_64_unknown_none_only@0.1.0: NOT x86_64-unknown-none
warning: test_x86_64_unknown_none_only@0.1.0: Target arch: Ok("x86_64")
warning: test_x86_64_unknown_none_only@0.1.0: Target vendor: Ok("unknown")
warning: test_x86_64_unknown_none_only@0.1.0: Target os: Ok("none")

Условия не срабатывают даже по одному.

Кажется что #[cfg] не работает вовсе, но если бы оно не работало, то первое сообщение тоже бы выводилось, но нет
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
TrueBers
@TrueBers
Гуглю за еду
А как оно будет работать, если build.exe для того и предназначен, чтобы запускаться самим тулчейном на хостовой системе, а не на таргете?

Вот список переменных окружения, которые получаются через std::env::var в build.rs. Для target-triple тебе нужен TARGET.

Чтобы получить host-triple, нужна переменная HOST.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы