2014-03-02 35 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以编译成可执行文件的与语言无关的代码表示。