rust 我可以禁用发布模式的开发依赖特性吗?

yrdbyhpb  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(105)

最近,我使用cargo build --release --timings调查了我的rust项目构建时间,发现尽管处于发布模式,但开发依赖特性占用了大量构建时间。
特别是,我使用sea-orm和以下特性,而sqlite特性仅用于测试:

[dependencies.sea-orm]
version = "0.11"
features = ["runtime-tokio-rustls", "sqlx-mysql", "macros"]
default-features = false

[dev-dependencies]
sea-orm = { version = "0.11", features = ["sqlx-sqlite"]}

字符串
当然,cargo在cargo.lock中解决了所有这些功能。然而,构建sqlite sys库占用了大量的构建时间,即使在发布模式下也是如此。
虽然不是很关键,但在构建发布概要文件时排除此功能会更好。有没有办法做到这一点?

xwbd5t1u

xwbd5t1u1#

这就是Cargo的原始特性解析器的工作方式;特征标志在所有内容中统一。
幸运的是,在Rust 2021中引入了一个功能解析器版本2,它将这些功能分解得更像你所期望的那样(单独的“bucket”用于构建依赖项,开发依赖项和平台特定标志),但可能会多次编译一些crate(如果它们在不同的“bucket”中启用了不同的功能标志)。
您可能不使用新功能解析器的原因有以下几个:

  • 如果您的crate使用edition = "2018"或更早版本,默认情况下将使用原始解析器。您可以更新到edition = "2021"或在Cargo.toml的[package]中指定resolver = "2"
  • 如果您使用的是带有根包的工作区,它只使用根Cargo.toml的配置,所以如果使用的是以前的版本,请使用上面的步骤。
  • 如果您使用的是没有根包的工作区-仅限成员(即虚拟清单),则它将默认使用原始解析器。您需要在[workspace]中指定resolver = "2"

参见:

相关问题