2014-03-02 62 views
0

與GCC類似,clang支持在處理C/C++的不同階段停止。例如,傳遞-E標誌會導致它在預處理器和-c在鏈接之前停止後停止。Clang的不同處理階段

到目前爲止,我所知道的,

  1. -E:前處理
  2. -fsyntax-only:語法檢查
  3. -S:裝配
  4. -c:目標代碼

上午我錯過了那些之間的任何停止點,或者是它?

+0

我可能被證明是錯誤的,但是我會懷疑在任何現代編譯器中,程序集實際上是目標代碼之前的階段,而不是它的替代輸出。大多數編譯器也可以在命令行中鏈接(一個單獨的階段,即使是一個目標文件,因爲libc被鏈接)。 – abligh

+0

我有點想象一個管道:預處理器 - >語法 - >程序集 - >對象 - >最終可執行文件。我應該補充說,我所包含的編號比實際更符合邏輯;我是如何看待最終可執行文件的。 – namzug

+0

這就是'cc'用於在PDP-11上工作的方式,但是我認爲現代編譯器會在正常運行的情況下直接寫入對象文件。 – abligh

回答

4

您還可以使用-S -emit-llvm來生成LLVM IR程序集文件,並且僅爲-emit-llvm用於LLVM位代碼目標文件。這些是clang和其他LLVM前端生成並傳遞給LLVM以編譯成可執行文件的與語言無關的代碼表示。