Вдруг кто не знает, какая клевая штука сравнительно недавно в ночник пробралась. Наконец-то можно собирать зависимости с отличающимися от самого пакета настройками:
https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#profile-overrides
Profile Overrides
- Tracking Issue: rust-lang/rust#48683
- RFC: #2282
Profiles can be overridden for specific packages and custom build scripts. The general format looks like this:
cargo-features = ["profile-overrides"] [package] ... [profile.dev] opt-level = 0 debug = true # the `image` crate will be compiled with -Copt-level=3 [profile.dev.overrides.image] opt-level = 3 # All dependencies (but not this crate itself or any workspace member) # will be compiled with -Copt-level=2 . This includes build dependencies. [profile.dev.overrides."*"] opt-level = 2 # Build scripts and their dependencies will be compiled with -Copt-level=3 # By default, build scripts use the same rules as the rest of the profile [profile.dev.build-override] opt-level = 3
Overrides can only be specified for dev and release profiles.
Может быть чертовски полезно, например, при разработке чего-то игрового, когда нам надо что бы движок и рендер игры были собраны с оптимизациями и выдавали вменяемые FPS, но вот в какой-то из кусков нашей логики мы хотим отладчиком залезть (или просто получить стек вызовов с настоящими строками в файлах).
В минимальном виде на практике выглядит как прописывание
cargo-features = ["profile-overrides"]
в “шапку” Cargo.toml
+ добавление “оптимизируй все зависимости” куда угодно:
[profile.dev.overrides."*"]
opt-level = 2