2016-08-17 8 views
7

프로젝트의 바이너리 대신 LLVM-IR을 방출하려면 어떻게해야합니까? rustc--emit=llvm-ir 플래그를 사용할 수 있다는 것을 알고 있지만, 임의의 컴파일러 플래그를화물에 전달하는 것이 불가능하다는 것을 보여주는 일부 Github 문제를 읽었습니다.화물에서 LLVM-IR을 방출하는 방법

화물을 직접 가져와 LLVM-IR을 얻을 수있는 방법이 있습니까?

답변

10

카고를 통해 임의의 컴파일러 플래그를 rustc으로 전달하는 cargo rustc이 있습니다. 그래서 나는 생각한다 :

cargo rustc -- --emit=llvm-ir 

당신이 원하는 것입니다!

+0

[대체 놀이터에서 사용하는 것] (https://github.com/integer32llc/rust-playground/blob/374c47f24b581f062bfec1de7e5e2dba1c23e9ad/ui/src/sandbox.rs#L234)입니다. – Shepmaster

1

편집 : 대신 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 파일이 생성됩니다.