【问题标题】:How can I build a specific package in a workspace?如何在工作区中构建特定包?
【发布时间】:2022-01-12 17:29:43
【问题描述】:

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

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

当我运行cargo build --all 时,它会编译所有包。

我只想构建common 包。如果我做cd common 并做cargo 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

是否可以构建特定的包?

【问题讨论】:

  • 您的术语倒退了 - commonserver 是工作区中的项目,而不是项目中的工作区。
  • @JoeClay 文档中的通用术语是 workspace 包含多个 packagescrate

标签: rust rust-cargo


【解决方案1】:

您可以将--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

【讨论】:

    【解决方案2】:

    第一个答案不适用于:

    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
    

    【讨论】:

      【解决方案3】:

      您可以使用子项目的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
      

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-22
        • 2017-09-28
        相关资源
        最近更新 更多