fix invalid links,typos

pull/464/head
sunface 3 years ago
parent 8aa3ece81a
commit 1d0e94c035

@ -145,7 +145,6 @@
- [Features示例](cargo/reference/features/examples.md)
- [发布配置Profile](cargo/reference/profiles.md)
- [通过config.toml对Cargo进行配置](cargo/reference/configuration.md)
- [环境变量 todo](cargo/reference/env.md)
- [构建脚本 todo](cargo/reference/build-script/intro.md)
- [构建脚本示例 todo](cargo/reference/build-script/examples.md)
- [发布到crates.io todo](cargo/reference/publishing-on-crates.io.md)

@ -1,11 +1,11 @@
# 构建( Build )缓存
`cargo build` 的结果会被放入项目根目录下的 `target` 文件夹中,当然,这个位置可以三种方式更改:设置 `CARGO_TARGET_DIR` [环境变量](https://course.rs/cargo/reference/env.html)、[`build.target-dir`](https://course.rs/cargo/reference/configuration.html#buildtarget-dir) 配置项以及 `--target-dir` 命令行参数。
`cargo build` 的结果会被放入项目根目录下的 `target` 文件夹中,当然,这个位置可以三种方式更改:设置 `CARGO_TARGET_DIR` [环境变量](https://doc.rust-lang.org/stable/cargo/reference/environment-variables.html)、[`build.target-dir`](https://course.rs/cargo/reference/configuration.html#配置文件概览) 配置项以及 `--target-dir` 命令行参数。
## target 目录结构
`target` 目录的结构取决于是否使用 `--target` 标志为特定的平台构建。
#### 不使用 --target
`--target` 标志没有指定,`Cargo` 会根据宿主机架构进行构建,构建结果会放入项目根目录下的 `target` 目录中,`target` 下每个子目录中包含了相应的 [`发布配置profile`](cargo/reference/profiles.md) 的构建结果,例如 `release`、`debug` 是自带的`profile`,前者往往用于生产环境,因为会做大量的性能优化,而后者则用于开发环境,此时的编译效率和报错信息是最好的。
`--target` 标志没有指定,`Cargo` 会根据宿主机架构进行构建,构建结果会放入项目根目录下的 `target` 目录中,`target` 下每个子目录中包含了相应的 [`发布配置profile`](https://course.rs/cargo/reference/profiles.html) 的构建结果,例如 `release`、`debug` 是自带的`profile`,前者往往用于生产环境,因为会做大量的性能优化,而后者则用于开发环境,此时的编译效率和报错信息是最好的。
除此之外我们还可以定义自己想要的 `profile` ,例如用于测试环境的 `profile` `test`,用于预发环境的 `profile` `pre-prod` 等。
@ -30,7 +30,7 @@
| `target/<triple>/release/` | `target/thumbv7em-none-eabihf/release/` |
> **注意:**,当没有使用 `--target` 时,`Cargo` 会与构建脚本和过程宏一起共享你的依赖包,对于每个 `rustc` 命令调用而言,[`RUSTFLAGS`](https://course.rs/cargo/reference/configuration.md#buildrustflags) 也将被共享。
> **注意:**,当没有使用 `--target` 时,`Cargo` 会与构建脚本和过程宏一起共享你的依赖包,对于每个 `rustc` 命令调用而言,[`RUSTFLAGS`](https://course.rs/cargo/reference/configuration.html#配置文件概览) 也将被共享。
>
> 而使用 `--target`构建脚本、过程宏会针对宿主机的CPU架构进行各自构建且不会共享 `RUSTFLAGS`
@ -39,8 +39,8 @@
| 目录 | 描述 |
| --- | --- |
| `target/debug/` | 包含编译后的输出,例如二进制可执行文件、[库对象( library target )](https://course.rs/cargo/reference/manifest/cargo-target.html#library) |
| `target/debug/examples/` | 包含[示例对象( example target )](cargo/reference/manifest/cargo-target.html#examples) |
| `target/debug/` | 包含编译后的输出,例如二进制可执行文件、[库对象( library target )](https://course.rs/cargo/reference/cargo-target.html#库对象library) |
| `target/debug/examples/` | 包含[示例对象( example target )](https://course.rs/cargo/reference/cargo-target.html#示例对象examples) |
还有一些命令会在 `target` 下生成自己的独立目录:
@ -54,7 +54,7 @@ Cargo 还会创建几个用于构建过程的其它类型目录,它们的目
| 目录 | 描述 |
| --- | --- |
| `target/debug/deps` | 依赖和其它输出成果 |
| `target/debug/incremental` | `rustc` [增量编译](https://course.rs/cargo/reference/profile.html#incremental)的输出,该缓存可以用于提升后续的编译速度 |
| `target/debug/incremental` | `rustc` [增量编译](https://course.rs/cargo/reference/profiles.html#incremental)的输出,该缓存可以用于提升后续的编译速度 |
| `target/debug/build/` | [构建脚本](https://course.rs/cargo/reference/build-script/intro.html)的输出 |
## 依赖信息文件
@ -62,7 +62,7 @@ Cargo 还会创建几个用于构建过程的其它类型目录,它们的目
该文件往往用于提供给外部的构建系统,这样它们就可以判断 `Cargo` 命令是否需要再次被执行。
文件中的路径默认是绝对路径,你可以通过 [`build.dep-info-basedir`](https://course.rs/cargo/reference/configuration.html#builddep-info-basedir) 配置项来修改为相对路径。
文件中的路径默认是绝对路径,你可以通过 [`build.dep-info-basedir`](https://course.rs/cargo/reference/configuration.html#配置文件概览) 配置项来修改为相对路径。
```shell
# 关于 `.d` 文件的一个示例 : target/debug/foo.d
@ -75,5 +75,5 @@ Cargo 还会创建几个用于构建过程的其它类型目录,它们的目
为了设置 `sccache`,首先需要使用 `cargo install sccache` 进行安装,然后在调用 `Cargo` 之前将 `RUSTC_WRAPPER` 环境变量设置为 `sccache`
- 如果用的 `bash`,可以将 `export RUSTC_WRAPPER=sccache` 添加到 `.bashrc`
- 也可以使用 [`build.rustc-wrapper`](https://course.rs/cargo/reference/configuration.html#buildrustc-wrapper) 配置项
- 也可以使用 [`build.rustc-wrapper`](https://course.rs/cargo/reference/configuration.html#配置文件概览) 配置项

@ -8,7 +8,7 @@ $ echo $HOME/.cargo/
/Users/sunfei/.cargo/
```
我们也可以通过修改 `CARGO_HOME` [环境变量](https://course.rs/cargo/reference/env.html)的方式来重新设定该目录的位置。若你需要在项目中通过代码的方式来获取 `CARGO_HOME` [`home`](https://crates.io/crates/home) 包提供了相应的 API。
我们也可以通过修改 `CARGO_HOME` 环境变量的方式来重新设定该目录的位置。若你需要在项目中通过代码的方式来获取 `CARGO_HOME` [`home`](https://crates.io/crates/home) 包提供了相应的 API。
> 注意! Cargo Home 目录的内部结构并没有稳定化,在未来可能会发生变化
@ -50,3 +50,16 @@ $ echo $HOME/.cargo/
- 如果以上都没了,会从网络上重新下载
你也可以使用 [cargo-cache](https://crates.io/crates/cargo-cache) 包来选择性的清除 `cache` 中指定的部分,当然,它还可以用来查看缓存中的组件大小。
## 构建时卡住Blocking waiting for file lock ..
在开发过程中,或多或少我们都会碰到这种问题,例如你同时打开了 VSCode IDE 和终端,然后在 `Cargo.toml` 中刚添加了一个新的依赖。
此时 IDE 会捕捉到这个修改然后自动去重新下载依赖(这个过程可能还会更新 `crates.io` 使用的索引列表),在此过程中, Cargo 会将相关信息写入到 `$HOME/.cargo/.package_cache` 下,并将其锁住。
如果你试图在另一个地方(例如终端)对同一个项目进行构建,就会报错: `Blocking waiting for file lock on package cache`
解决办法很简单:
- 既然下载慢,那就使用[国内的注册服务](https://course.rs/cargo/reference/specify-deps.html#从其它注册服务引入依赖包),不再使用 crates.io
- 耐心等待持有锁的用户构建完成
- 强行停止正在构建的进程,例如杀掉 IDE 使用的 rust-analyer 插件进程,然后删除 `$HOME/.cargo/.package_cache` 目录
Loading…
Cancel
Save