0
與GCC類似,clang支持在處理C/C++的不同階段停止。例如,傳遞-E
標誌會導致它在預處理器和-c
在鏈接之前停止後停止。Clang的不同處理階段
到目前爲止,我所知道的,
-E
:前處理-fsyntax-only
:語法檢查-S
:裝配-c
:目標代碼
上午我錯過了那些之間的任何停止點,或者是它?
與GCC類似,clang支持在處理C/C++的不同階段停止。例如,傳遞-E
標誌會導致它在預處理器和-c
在鏈接之前停止後停止。Clang的不同處理階段
到目前爲止,我所知道的,
-E
:前處理-fsyntax-only
:語法檢查-S
:裝配-c
:目標代碼上午我錯過了那些之間的任何停止點,或者是它?
您還可以使用-S -emit-llvm
來生成LLVM IR程序集文件,並且僅爲-emit-llvm
用於LLVM位代碼目標文件。這些是clang和其他LLVM前端生成並傳遞給LLVM以編譯成可執行文件的與語言無關的代碼表示。
我可能被證明是錯誤的,但是我會懷疑在任何現代編譯器中,程序集實際上是目標代碼之前的階段,而不是它的替代輸出。大多數編譯器也可以在命令行中鏈接(一個單獨的階段,即使是一個目標文件,因爲libc被鏈接)。 – abligh
我有點想象一個管道:預處理器 - >語法 - >程序集 - >對象 - >最終可執行文件。我應該補充說,我所包含的編號比實際更符合邏輯;我是如何看待最終可執行文件的。 – namzug
這就是'cc'用於在PDP-11上工作的方式,但是我認爲現代編譯器會在正常運行的情況下直接寫入對象文件。 – abligh