Полезнота: оптимизированные зависимости при отладочной сборке

Вдруг кто не знает, какая клевая штука сравнительно недавно в ночник пробралась. Наконец-то можно собирать зависимости с отличающимися от самого пакета настройками:

https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#profile-overrides

Profile Overrides

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
8 лайков