Cargo: рдЬрдм рд▓рдХреНрд╖реНрдп JSON рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ `TARGET` рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЕрдЧре░ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/cargo

рдХрджрдо

  1. cargo new repro && cd repro

  2. rustc +nightly -Z unstable-options --print target-spec-json --target x86_64-apple-darwin > x86_64-apple-darwin.json

    рд╕рдВрдХрд▓рдХ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рдорд╛рдорд▓реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП JSON рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓рдХреНрд╖реНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  3. build.rs рдмрдирд╛рдПрдВ

    fn main() {
        dbg!(std::env::var("TARGET"));
    }
    
  4. cargo +nightly build --target $PWD/x86_64-apple-darwin.json -Z build-std --verbose --verbose --verbose

    build-std рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЧреИрд░-рдорд╛рдирдХ рд▓рдХреНрд╖реНрдп рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ TARGET рдЪрд░ рдХреЗ рдкрд╛рд╕ рдЕрдм рдкрде рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ .json рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ:

[repro 0.1.0] [build.rs:2] std::env::var("TARGET") = Ok(
[repro 0.1.0]     "x86_64-apple-darwin",
[repro 0.1.0] )

рдЬрдм рдореИрдВ JSON рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ aarch64-apple-darwin рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рддрдм рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/рд░рд╕реНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, indexmap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ autocfg рдЬреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ TARGET рдирд┐рд░реНрдорд╛рдг рдмрд╛рддреЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдЕрднреА рддрдХ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП autocfg рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ rustc рдХрд╛ рдЧрд▓рдд рд╕рдВрд╕реНрдХрд░рдг рдерд╛ред

рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ JSON рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдкрде рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХрд╛ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рд╣реЛрдЧрд╛ред

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

% cargo +nightly version
cargo 1.47.0-nightly (51b66125b 2020-08-19)
% rustc +nightly --version
rustc 1.47.0-nightly (5180f3da5 2020-08-23)
A-build-scripts A-environment-variables A-target-spec C-bug

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ #7425 рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдПрдХ рдмрджрд▓рд╛рд╡ рдерд╛, рдЬреЛ рд╢рд╛рдпрдж рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдерд╛ (рдпрд╛ рдЙрд╕ рд╕рдордп рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдЕрдЧрд░ @alexcrichton рдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдпрд╣рд╛рдВ short_name рд╣реИ , рдпрд╛ рдпрджрд┐ рдЗрд╕реЗ rustc_target рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ JSON рд╕реНрдкреЗрдХреНрд╕ рдереЛрдбрд╝реЗ рдЕрд╕реНрдерд┐рд░ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ TARGET 1.40 рд╕реЗ рдкрд╣рд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рдерд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЧреНрдЧрд▓ рд░реВрдо рд╣реИред

рдЪреВрдВрдХрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдкрде ( file_stem ) рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрдг рдкрде рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореИрдВ рддреБрд░рдВрдд рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛), рддреЛ рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рдкрде рд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдкрде рдХреЛ рд╡рд┐рд╣рд┐рддреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ autocfg рдХреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдЧреЛ рдЖрдордВрддреНрд░рдг рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИ, рд╣реИ рдирд╛? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдкрд╣рд▓реВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдХрд┐ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЬрдВрдЧ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрде рдпрд╣рд╛рдБ рд╡рд┐рд╣рд┐рдд canonicalize рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

briansmith picture briansmith  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

disconsented picture disconsented  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JustAPerson picture JustAPerson  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jtgeibel picture jtgeibel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ckaran picture ckaran  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ