我正在使用rust编译并构建示例程序。我选择rustc
而不是cargo
进行编译,因为它是一个简单的个人测试项目。到目前为止,使用rustc
进行编译和构建可执行文件效果很好,但是当我尝试添加外部rand
包时,它给了我这个错误
1 | extern crate rand;
| ^^^^^^^^^^^^^^^^^^ can't find crate
这是完整代码
extern crate rand;
use rand::Rng;
fn main() {
for x in 1..11 {
let random_number = rand::thread_rng()
.gen_range(1, 101);
println!("{} -> {}", x, random_number)
}
}
如何添加外部软件包并使用rustc
运行?
如果没有货运,这是可能的,但是您必须做通常为您做的事。
rustc
编译所有依赖项。rand v0.7.3
├── getrandom v0.1.14
│ ├── cfg-if v0.1.10
│ └── libc v0.2.66
├── libc v0.2.66 (*)
├── rand_chacha v0.2.1
│ ├── c2-chacha v0.2.3
│ │ └── ppv-lite86 v0.2.6
│ └── rand_core v0.5.1
│ └── getrandom v0.1.14 (*)
└── rand_core v0.5.1 (*)
rand
还不错,只有8个传递依赖项(包括rand
本身,不包括重复项)。尽管如此,您仍然必须转到crates.io或github并为每个下载正确的源代码版本。
然后进行编译。编译自己的二进制文件所需要做的最少工作是rustc -L dependency=/path/to/dependency/dir src/main.rs
。但是请记住,您必须对8个依赖项中的每一个都执行此操作,并且所有这些依赖项都有其自己的外部依赖项。您还需要弄清楚编译它们的正确顺序。
移动,某些板条箱的Cargo.toml
中有其自己的设置,必须遵守。一些包装箱甚至具有需要编译和运行的构建脚本(libc
是此依赖关系树中的一个示例)。
或者,你可以放]
[dependencies] rand = "0.7.3"
在
Cargo.toml
中,然后运行cargo build
。你的选择。货物是Rust最好的东西之一,所以我建议您使用它。
P.S。要查看cargo
到底在做什么,请运行cargo clean
删除所有已编译的依赖项。然后运行cargo build --verbose
(如果您很勇敢,请运行cargo build -vv
)。您将看到传递给rustc
的所有标志,运行的脚本以及所有其他内容。
我想扩展@SCappella的答案。我鼓励您也使用cargo
。如果您熟悉其他语言(例如JS,PHP或Python)的程序包管理器,则可能对cargo edit感兴趣。
它允许您在CLI中运行命令cargo add rand
(最新版本),cargo add [email protected]
(特定版本),cargo upgrade rand
(仅升级rand
),cargo upgrade
(所有依赖项),而不用编辑[C0 ]文件。