最近,我使用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库占用了大量的构建时间,即使在发布模式下也是如此。
虽然不是很关键,但在构建发布概要文件时排除此功能会更好。有没有办法做到这一点?
1条答案
按热度按时间xwbd5t1u1#
这就是Cargo的原始特性解析器的工作方式;特征标志在所有内容中统一。
幸运的是,在Rust 2021中引入了一个功能解析器版本2,它将这些功能分解得更像你所期望的那样(单独的“bucket”用于构建依赖项,开发依赖项和平台特定标志),但可能会多次编译一些crate(如果它们在不同的“bucket”中启用了不同的功能标志)。
您可能不使用新功能解析器的原因有以下几个:
edition = "2018"
或更早版本,默认情况下将使用原始解析器。您可以更新到edition = "2021"
或在Cargo.toml的[package]
中指定resolver = "2"
。[workspace]
中指定resolver = "2"
。参见: