如何从Cargo发射LLVM-IR

Ame*_*meo 11 rust llvm-ir rust-cargo

如何让货物为我的项目发出LLVM-IR而不是二进制文件?我知道你可以使用这个--emit=llvm-ir标志rustc,但是我已经阅读了一些Github问题,这些问题表明不可能将任意编译器标志传递给货物.

有什么方法可以让货物直接发射LLVM-IR吗?

Jac*_*cob 21

cargo rustc通过Cargo传递任意编译器标志rustc.所以我认为:

cargo rustc -- --emit=llvm-ir
Run Code Online (Sandbox Code Playgroud)

是你想要的!

  • 这就是[备用游乐场使用的](https://github.com/integer32llc/rust-playground/blob/374c47f24b581f062bfec1de7e5e2dba1c23e9ad/ui/src/sandbox.rs#L234)。 (2认同)

Ame*_*meo 7

编辑:你应该使用雅各布的答案;更容易并且更少黑客。

通常使用货物构建项目,但添加标志-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
Run Code Online (Sandbox Code Playgroud)

如果该命令没有产生输出,请在项目代码中的某处进行更改,以欺骗编译器重建它,因为只有在检测到其中一个文件发生更改时,它才会重建。

rustc从以“Running `rustc...”开头的行的 ` 标记内复制命令并附加到--emit=llvm-ir它。

这将在您的 /target/debug 文件夹中生成一个 .ll 文件。