创建Cargo工作区时,清单中未指定目标

时间:2016-08-26 12:45:56

标签: rust rust-cargo

使用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有关的东西可以达到同样的效果。

1 个答案:

答案 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