如何在工作区中构建特定包?

How can I build a specific package in a workspace?

我的 Cargo 项目中有两个包。 Cargo.toml 看起来像这样:

[workspace]
members = ["common", "server"]

当我 运行 cargo build --all 它编译所有的包。

我只想构建 common 包。如果我做 cd commoncargo build 它工作正常。

但是在根目录中,如果我这样做 cargo build common,构建会给出这个错误:

error: Found argument 'common' which wasn't expected, or isn't valid in this context

USAGE:
    cargo build [OPTIONS]

For more information try --help

是否可以构建特定的包?

您可以使用 --package-p 标记来 cargo build:

cargo build                # build packages listed in the default-members key
cargo build --all          # build all packages
cargo build --package foo  # build the package "foo"
cargo build -p foo         # ditto

第一个答案不适用于:

error: package ID specification `foo` matched no packages

正确的方法是:

先找出pkgid

$ cd server
$ cargo pkgid

file:///dw/path/to/server:4.0.0-SNAPSHOT

转到工作区文件夹并 运行 build

$ cd -
cargo build -p file:///dw/path/to/server:4.0.0-SNAPSHOT

您可以使用您的子项目Cargo.toml中使用的名称,例如:

# proj1/Cargo.toml
[package]
name = "project-1"

如果你运行:

cargo build -p proj1

您将获得:

error: package ID specification `proj1` matched no packages

所以不要使用文件夹名称并使用包名称:

cargo build -p project-1