Если вызываю rustc из cmd командой:
rustc +nightly --crate-type cdylib lib.rs
то всё норм, а если из build-скрипта другого проекта так:
Command::new("rustc").args(&[
"+nightly",
"--crate-type",
"cdylib",
"lib.rs"
]).current_dir("<path>")
.status().unwrap();
то пишет:
error: multiple input filenames provided (first two filenames are `+nightly` and `lib.rs`)
почему так?
Скорее всего, в передаваемом билд-скрипту наборе путей для поиска исполняемых файлов сам rustc идёт раньше, чем rustup-враппер, а аргумент +nightly
в норме именно rustup забирает.
Вообще не следует напрямую прописывать в билд-скрипте имя тулчейна, поскольку ломаться это будет в непредсказуемых местах… например, при попытке собрать с помощью nightly за конкретную дату.
Вообще не следует напрямую прописывать в билд-скрипте имя тулчейна
А как лучше? Нужно, чтобы была именно nightly.
Нужно написать это в докуменации, потому что юзеру виднее, как именно у него установлен тулчейн. Может, у него вообще свой тестовый билд компилятора. Или, скажем, только nightly и без rustup.
я насколько помню, там нужно дать для rustc недокументированный ключ, который можно подсмотреть, если запустить cargo build -v
.