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