프로젝트의 바이너리 대신 LLVM-IR을 방출하려면 어떻게해야합니까? rustc
에 --emit=llvm-ir
플래그를 사용할 수 있다는 것을 알고 있지만, 임의의 컴파일러 플래그를화물에 전달하는 것이 불가능하다는 것을 보여주는 일부 Github 문제를 읽었습니다.화물에서 LLVM-IR을 방출하는 방법
화물을 직접 가져와 LLVM-IR을 얻을 수있는 방법이 있습니까?
프로젝트의 바이너리 대신 LLVM-IR을 방출하려면 어떻게해야합니까? rustc
에 --emit=llvm-ir
플래그를 사용할 수 있다는 것을 알고 있지만, 임의의 컴파일러 플래그를화물에 전달하는 것이 불가능하다는 것을 보여주는 일부 Github 문제를 읽었습니다.화물에서 LLVM-IR을 방출하는 방법
화물을 직접 가져와 LLVM-IR을 얻을 수있는 방법이 있습니까?
카고를 통해 임의의 컴파일러 플래그를 rustc
으로 전달하는 cargo rustc
이 있습니다. 그래서 나는 생각한다 :
cargo rustc -- --emit=llvm-ir
당신이 원하는 것입니다!
편집 : 대신 Jacob의 대답을 사용해야합니다. 훨씬 쉽고 덜 해킹.
일반적으로화물을 사용하여 프로젝트를 빌드하지만 자세한 출력을 표시하려면 -v
플래그를 추가하십시오. 명령이 더 출력을 생성하지
[email protected]:~/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`s rustc ..."로 시작하는 줄의 마커 안쪽에서 복사하고 --emit=llvm-ir
을 추가하십시오.
이렇게하면/target/debug 폴더에 .ll 파일이 생성됩니다.
[대체 놀이터에서 사용하는 것] (https://github.com/integer32llc/rust-playground/blob/374c47f24b581f062bfec1de7e5e2dba1c23e9ad/ui/src/sandbox.rs#L234)입니다. – Shepmaster