现在让我们看看通过 Cargo 构建和运行 ”Hello, world!” 程序有什么不同!在 hello_cargo 目录下,输入下面的命令来构建项目:
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs
这个命令会创建一个可执行文件 target∕debug∕hello_cargo (在 Windows 上是 targetdebughello_cargo.exe),而不是放在目前目录下。可以通过这个命令运行可执行文件:
Hello, world!
如果一切顺利,终端上应该会打印出 Hello, world!。首次运行 cargo build 时,也会使 Cargo 在项目根目录创建一个新文件:Cargo.lock。这个文件记录项目依赖的实际版本。这个项目并没有依赖,所以其内容比较少。你自己永远也不需要碰这个文件,让 Cargo 处理它就行了。
我们刚刚使用 cargo build 构建了项目,并使用 .∕ target∕debug∕hello_cargo 运行了程序,也可以使用
cargo run 在一个命令中同时编译并运行生成的可执行文件:
Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
Running `target/debug/hello_cargo`
Hello, world!
HELLO, CARGO! 31
注意这一次并没有出现表明 Cargo 正在编译 hello_cargo 的输出。Cargo 发现文件并没有被改变,就直接运行了二进制文件。如果修改了源文件的话,Cargo 会在运行之前重新构建项目,并会出现像这样的输出:
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.33 secs
Running `target/debug/hello_cargo`
Hello, world!
Cargo 还提供了一个叫 cargo check 的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件:
Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
为什么你会不需要可执行文件呢?通常 cargo check 要比 cargo build 快得多,因为它省略了生成可执行文件的步骤。如果你在编写代码时持续的进行检查,cargo check 会加速开发!为此很多 Rustaceans
编写代码时定期运行 cargo check 确保它们可以编译。当准备好使用可执行文件时才运行 cargo build。
我们回顾下已学习的 Cargo 内容:
• 可以使用 cargo build 构建项目。
• 可以使用 cargo run 一步构建并运行项目。
• 可以使用 cargo check 在不生成二进制文件的情况下构建项目来检查错误。
• 有别于将构建结果放在与源码相同的目录,Cargo 会将其放到 target∕debug 目录。
使用 Cargo 的一个额外的优点是,不管你使用什么操作系统,其命令都是一样的。所以从现在开始本书将不再为 Linux 和 macOS 以及 Windows 提供相应的命令。