虽然我已经看过直接使用rustc
输出汇编的文档,但是必须手动提取Cargo使用的命令并编辑它们来编写汇编是很繁琐的。
有没有办法运行编写汇编文件的货物?
您可以使用Cargo的cargo rustc
命令直接向rustc
发送参数:
cargo rustc -- --emit asm
ls target/debug/deps/crate_name.s
对于优化装配:
cargo rustc --release -- --emit asm
ls target/release/deps/crate_name.s
除了kennytm的答案,您还可以使用RUSTFLAGS
环境变量并使用标准货物命令:
RUSTFLAGS="--emit asm" cargo build
cat target/debug/deps/project_name-hash.s
或者在发布模式下(带优化):
RUSTFLAGS="--emit asm" cargo build --release
cat target/release/deps/project_name-hash.s
您可以将不同的值传递给--emit
参数,包括(但不限于):
mir
(Rust中间表示)llvm-ir
(LLVM中间代表)llvm-bc
(LLVM字节码)asm
(集会)现有的答案(使用cargo rustc
和RUSTFLAGS
)都是使用标准工具获得装配的最佳方法。如果您发现自己经常尝试查看程序集,可能需要考虑使用the cargo asm
subcommand。使用cargo install cargo-asm
安装后,您可以打印如下组件:
cargo build --release
cargo asm my_crate::my_function
但有几点需要注意:
cargo asm
,它将列出您可以检查的所有符号。cargo build --release
,因为cargo asm
(显然)只查看已经存在的构建工件[build]
rustflags = ["--emit", "asm", "-Cllvm-args=--x86-asm-syntax=intel"]