上一篇比较了 debug 与 release 的速度,这一篇换一个角度:profile 到底在配置什么?它们真实传给 rustc 的参数是什么?怎样给依赖单独调优、自定义 profile、调整调试信息?全部用 cargo -v 的输出和真实文件大小回答。
dev → ['debuginfo=2', 'embed-bitcode=no', 'incremental=<实验目录>/target/debug/incremental'] release → ['embed-bitcode=no', 'opt-level=3', 'strip=debuginfo'] test(cargo test) → ['debuginfo=2', 'embed-bitcode=no', 'incremental=<实验目录>/target/debug/incremental']
dev 与 release 的耗时对比见Debug 与 Release 构建差异;LTO 与体积见LTO 与二进制体积。
itoa(依赖) → ['debug-assertions=on', 'debuginfo=2', 'embed-bitcode=no', 'opt-level=3'] u155(自己) → ['debuginfo=2', 'embed-bitcode=no', 'incremental=<实验目录>/target/debug/incremental']
fastdev → ['debug-assertions=on', 'embed-bitcode=no', 'incremental=<实验目录>/target/fastdev/incremental', 'opt-level=2', 'strip=debuginfo'] 产物目录:['fastdev'](target/fastdev 是单独的目录) 不存在的 profile: ['error: profile `nonexistent` is not defined']
debug = 0 二进制 457,944 字节 整个 target/release 目录 916,974 字节 debug = "line-tables-only" 二进制 461,032 字节 整个 target/release 目录 1,186,693 字节 debug = 2 二进制 461,032 字节 整个 target/release 目录 1,442,742 字节
macOS 的调试信息保存方式与 Linux 不同;这里的「二进制几乎不变」是 macOS 上的结果。
build.rs(build_script_build)的 -C 参数 → ['debug-assertions=off', 'embed-bitcode=no', 'extra-filename=-497d791bf9e47b90', 'metadata=9a7c5efaf47ed1eb', 'strip=debuginfo'](没有 opt-level=,即默认的 0) 目标代码 u155b → ['embed-bitcode=no', 'opt-level=3', 'strip=debuginfo']
build.rs 的更多行为见Build Script build.rs。