使用Rust 1.11和Cargo 1.12(每晚),我尝试创建一个[workspace]
,其中包含一些库和一些可执行文件。
在我的根文件夹中,我添加了我的子包:
cargo new loader
cargo new shell --bin
然后我将下面显示的cargo.toml
添加到我的根文件夹中。
[package]
name = "rustenv"
version = "0.1.0"
authors = ["ME"]
[workspace]
members = [
"loader"
, "shell"
]
在我的根文件夹中运行cargo build
会产生:
PS E:\r\rustenv> cargo build error: failed to parse manifest at `E:\r\rustenv\Cargo.toml` Caused by: no targets specified in the manifest either src/lib.rs, src/main.rs, a [lib] section, or [[bin]] section must be present
我对这个[workspace]
功能如何工作有点困惑,因为我本质上是一个Visual Studio用户,我可以简单地将项目添加到工作区。看来我还有其他一些与Cargo有关的东西可以达到同样的效果。
答案 0 :(得分:1)
如果您的根项目没有产生任何工件(它不是库/二进制文件),那么就Cargo workspaces RFC而言
它是"虚拟",它应该只包含workspace
部分:
[workspace]
members = [
"loader"
, "shell"
]
如果cargo build
不起作用,您应该
cd loader
cargo build
cd ..
cd shell
cargo build
这种配置有什么用?你有共享输出目录" target"和" Cargo.lock",所以如果你输入"货物构建" in" loader"您已在" ../ target /"
中编译库的子目录演示其工作原理的Shell会话:
/tmp $ mkdir test
/tmp $ cd test
/tmp/test $ cargo new loader && cargo new shell --bin
Created library `loader` project
Created binary (application) `shell` project
/tmp/test $ cat > Cargo.toml
[workspace]
members = ["loader", "shell"]
/tmp/test $ cat loader/Cargo.toml
[package]
name = "loader"
version = "0.1.0"
authors = ["me"]
workspace = ".."
[dependencies]
/tmp/test $ cat shell/Cargo.toml
[package]
name = "shell"
version = "0.1.0"
authors = ["me"]
workspace = ".."
[dependencies]
/tmp/test/shell $ cargo build
Compiling shell v0.1.0 (file:///tmp/test/shell)
Finished debug [unoptimized + debuginfo] target(s) in 0.57 secs
evgeniy@localhost /tmp/test/shell $ ls
Cargo.toml src
evgeniy@localhost /tmp/test/shell $ ls ../
Cargo.lock Cargo.toml loader shell target
/tmp/test $ cargo --version
cargo 0.13.0-nightly (cd8ad10 2016-08-15)
如果您使用Visual Studio工作/工作,请查看the Rust plugin for Jetbrains IDE