如何从Cargo生成LLVM-IR

23

如何让 cargo 生成 LLVM-IR 而非二进制文件呢? 我知道可以在 rustc 中使用 --emit=llvm-ir 标志,但我读过一些 Github 的问题,显示无法将任意编译器标志传递给 cargo。

有没有办法让 cargo 直接输出 LLVM-IR 呢?

2个回答

46

可以使用通过Cargo向传递任意编译器标志。因此我认为:

cargo rustc -- --emit=llvm-ir

这就是你想要的!

这将在 target\debug\deps\ 目录下生成一个 ll 文件。


2
这是备用游乐场使用的 - Shepmaster
1
五年后,这个输出的IR文件在哪里?我刚刚在《Rust编程之书》中的“猜数字游戏”项目上运行了它,但我找不到它。 - mLstudent33
添加到答案中。 - Jacob

7

编辑:您应该使用Jacob的答案,更加简单和不那么hacky。

正常使用cargo构建项目,但添加-v标志以显示详细输出。 命令将具有以下结果:

casey@casey-ubuntu:~/Documents/project$ cargo build -v
   Fresh aster v0.22.1
   Fresh num-traits v0.1.34
   Fresh itoa v0.1.1
   ...
Compiling project v0.1.0 (file:///home/casey/Documents/project)
 Running `rustc src/main.rs --crate-name ...`
Finished debug [unoptimized + debuginfo] target(s) in 3.54 secs

如果该命令没有输出,请在项目代码中进行更改,以欺骗编译器重新构建它,因为它只会在检测到文件中的更改时才会重新构建。
从以“Running `rustc...”开头的行内部复制rustc命令,并在其末尾添加--emit=llvm-ir。
这将在/target/debug文件夹中生成一个.ll文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接