为什么通过命令提示符编译C程序时没有创建*.o(目标)文件?

Why *.o (object) file is not created while compiling C Program through Command Prompt?

在使用代码块时,*.o(目标)文件是在我点击构建按钮时创建的。 但是,在使用命令提示符时,不会创建 *.o 文件。是什么原因? 我正在使用 TDM-GCC-64。

当您直接从命令行使用 GCC 编译 C 程序而不使用选项 -c(仅编译)时,它将创建一个可执行文件而不转储中间目标文件。

这些目标文件仍会创建,但它们被认为是临时的,并在最终程序链接后被删除。

当您使用 IDE 时,它通常会执行分开的编译和链接阶段,因此目标文件会保留在周围。如果您的程序非常重要并且有很多源文件,这很好,因为它可以加快编译时间。

您可以看到带有选项 -v verbose:

的 GCC 命令行的完整输出
$ gcc -v -o hello hello.c
...
.../cc1 -quiet -v hello.c ... -o /tmp/ccbKBzKx.s
...
... as -v --64 -o /tmp/ccLm6v3X.o /tmp/ccbKBzKx.s
... collect2 ... /tmp/ccLm6v3X.o ... -o hello

注释:

  • cc1是真正的C编译器的内部名称,它会转储一个汇编文件。
  • as是将程序集转换为目标文件的汇编器。
  • p collect2 是链接器的内部名称,它读取目标文件和库并创建最终的可执行文件。