我可以使用单个Cargo.toml但代码的多个版本来指定存储库结构,每个版本具有单独的main.rs文件吗?

时间:2018-09-12 18:40:14

标签: rust rust-cargo

我正在使用mdbook作为一个git存储库编写一本有关嵌入式Rust的书,然后我在cargo创建的另一个存储库中放置了代码。

我想对代码进行结构化,使其与本书中的章节相对应,因此位于单独的目录中。

这本书的结构:

├── book
├── book.toml
└── src
    ├── chapter_1.md
    ├── chapter_2.md
    ├── chapter_3.md
    ├── chapter_4.md
    ├── chapter_5.md
    ├── chapter_6.md
    └── SUMMARY.md

以及代码的结构:

├── aarch64-unknown-none.json
├── Cargo.lock
├── Cargo.toml
├── layout.ld
├── Readme.md
├── chapter1
│   └── main.rs
├── chapter2
│   ├── boot.rs
│   └── main.rs
└── chapter3
    ├── boot.rs
    ├── console.rs
    └── main.rs

我更喜欢这种结构,因为读者可以直接查看本章的代码,而不必搜索git commits。有时候我有时还需要修改一些内容,因此git commits不是解决方案。

是否可以在Cargo.toml中指定此格式?要构建所有目录或在命令行上指定哪个目录。

1 个答案:

答案 0 :(得分:2)

确切的解决方案可以在second edition of the Rust book中找到示例。

我这样重组存储库:

├── aarch64-unknown-none.json
├── Cargo.lock
├── Cargo.toml
├── layout.ld
├── Readme.md
├── chapter1
│   ├── Cargo.toml
│   └── main.rs
├── chapter2
│   ├── boot.rs
│   ├── Cargo.toml
│   └── main.rs
└── chapter3
    ├── boot.rs
    ├── Cargo.toml
    ├── console.rs
    └── main.rs
目录中的

Cargo.toml文件保持不变。仅修改根目录中的Cargo.toml,使其包含以下内容:

[workspace]
members = ["chapter1", "chapter2", "chapter3"]

此解决方案的一个小缺点是,成员的Cargo.toml中必须具有不同的板条箱名称,因为所有成员的输出都存储在工作空间根目录的target目录中。这只是一个小问题,我感谢Cargo提供的灵活性。