Skip to content

Commit 5ac7b09

Browse files
src/{target_path}.rs の形のパスの自動推論について追記
1 parent c0c17dc commit 5ac7b09

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/rust-2018/cargo.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
-->
2121

2222
- `Cargo.toml` にターゲットの指定がある場合であっても、他のターゲットの自動探索がされなくなるということはなくなりました[^1]
23-
- `path` フィールドが指定されていないターゲットに対して、`src/{target_name}.rs` の形のターゲットパスは自動設定されなくなりました[^2]
23+
- `path` フィールドが指定されていないターゲットに対して、`src/{target_name}.rs` の形のターゲットパスは自動推定されなくなりました[^2]
2424
- 現在のディレクトリに対して `cargo install` できなくなりました。現在のパッケージをインストールしたい場合は `cargo install --path .` と指定する必要があります[^3]
2525

2626
[^1] *訳注*:
@@ -33,7 +33,18 @@
3333
詳細は、[Cargo Book の "Target auto-discovery"(英語)][target-auto-discovery]もご覧ください。
3434

3535
[^2] *訳注*:
36-
[WIP] 詳細は不明です。
36+
Cargo は、ターゲットを宣言するセクション(つまり、例えば `[lib]` セクションや `[[bin]]` セクション)に `path` フィールドがなかった場合、
37+
`name` フィールドと[フォルダ構成の慣習][package-layout]に従ってパスを推論し、そのパスが存在すればそれを使用します。
38+
たとえば、`Cargo.toml`
39+
```toml
40+
[[bin]]
41+
name = "my_binary"
42+
```
43+
というセクションがあった場合、`path` フィールドが `src/bin/my_binary.rs` であると自動的に判断します。
44+
そして、`src/bin/my_binary.rs` が存在すれば、これをターゲットのソースとして採用することになります。
45+
Rust 2015 では、これに加えて `path``src/my_binary.rs` である可能性も候補になりました。
46+
すなわち、上の状況において `src/bin/my_binary.rs` が存在しないが `src/my_binary.rs` が存在する場合は、`src/my_binary.rs` をターゲットのソースとして採用しました。
47+
しかし、この挙動は時にわかりにくいエラーを生むため、この形のパスが候補とされる挙動を利用することは[非推奨となり](https://github.com/rust-lang/cargo/pull/4259#issuecomment-314138552)、Rust 2018 では挙動そのものが廃止されました。
3748

3849
[^3] *訳注*:
3950
[`cargo install`][cargo-install] コマンドは、指定したクレートのバイナリターゲットをインストールする、つまりビルドして実行ファイルを所定の場所に配置するためのコマンドです。

0 commit comments

Comments
 (0)