#TheBook #Rust
https://doc.rust-jp.rs/book-ja/ch14-00-more-about-cargo.html
## リリースプロファイルでビルドをカスタマイズする
- [[リリースプロファイル]]
```toml
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
```
## Crates.ioにクレートを公開する
- [[ドキュメンテーションコメント]]
- `cargo doc`でドキュメント生成
- `cargo test`で[[ドキュメンテーションコメント]]のコードも確認できる
```rust
/// 与えられた数値に1を足す
///
/// # Examples
///
/// ```
/// let five = 5;
/// assert_eq!(6, doctest::add_one(five));
/// ```
pub fn add_one(x: i32) -> i32 {
x + 1
}
```
の場合は
```rust
let five = 5;
assert_eq!(6, doctest::add_one(five));
```
をテストコードとして実行してくれる。
14-3のコード、`super::`いるよな...
```rust
pub mod utils {
use super::kinds::*;
/// Combines two primary colors in equal amounts to create a secondary color.
pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
SecondaryColor::Green
}
}
```
`lib.rs`の冒頭に以下でreexportしてやるとdocもトップページに出てくる。
```rust
pub use kinds::PrimaryColor;
pub use kinds::SecondaryColor;
pub use utils::mix;
```
`main.rs`で使う側も
```rust
use doctest::kinds::PrimaryColor;
use doctest::utils::mix;
```
となっていたのが
```rust
use doctest::{mix, PrimaryColor};
```
とシンプルに..!!
`pub use`は大事
> [!todo]
> [[クレート]]の公開はいずれやるときに...
- `cargo yank`で今後インストールされる[[クレート]]からは除外できる
- 既にインストールされていたら無理
- 削除はされない
## Cargoのワークスペース
```console
mkdir workspace-test
cd workspace-test
```
`workspace-test/Cargo.toml`
```toml
[workspace]
members = [
"adder",
]
```
```console
$ cargo new --bin adder
$ tree
.
├── adder
│ ├── Cargo.toml
│ └── src
│ └── main.rs
└── Cargo.toml
$ cargo build
$ tree -L 2
.
├── adder
│ ├── Cargo.toml
│ └── src
├── Cargo.lock
├── Cargo.toml
└── target
├── CACHEDIR.TAG
└── debug
```
`extern`の代わりは`use`なんだなあ...
```diff
- extern crate add_one;
+ use add_one;
```
`extern`や`use`なしでも動いた。
```rust
// 以下はどちらも不要だった
// extern crate add_one;
// use add_one;
fn main() {
let num = 10;
println!("{} -> {}", num, add_one::add_one(num))
}
```
`cargo run -p adder`ではなく`cargo run`でも動いた。
- [[ワークスペースは最上位階層にあるただ1つのCargo.lockファイルを共有する]]
- [[ワークスペースのあるパッケージに追加した依存関係は別のパッケージでは使えない]]
[[Scoop]]で[[rustup]]をインストールした場合 `cargo install` でインストールしたバイナリは `C:\Users\syoum\scoop\persist\rustup-msvc\.cargo\bin` 配下に保管される。