为什么在通过命令提示符编译C程序时不创建*.o(object)文件?

为什么在通过命令提示符编译C程序时不创建*.o(object)文件?,c,cmd,tdm-gcc,C,Cmd,Tdm Gcc,使用代码块时,*.o对象文件是在我点击Build按钮时创建的。 但是,在使用命令提示符时,不会创建*.o文件。原因是什么? 我使用的是TDM-GCC-64。如果直接从命令行使用GCC编译C程序,而不使用-C compile only选项,它将创建一个可执行文件,而不转储中间对象文件 这些对象文件仍将创建,但它们被视为临时文件,并在链接最终程序后删除 当您使用IDE时,它通常会执行单独的编译和链接阶段,因此对象文件会保留在周围。如果您的程序非常简单,并且有许多源文件,这是很好的,因为它加快了编译时

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

如果直接从命令行使用GCC编译C程序,而不使用-C compile only选项,它将创建一个可执行文件,而不转储中间对象文件

这些对象文件仍将创建,但它们被视为临时文件,并在链接最终程序后删除

当您使用IDE时,它通常会执行单独的编译和链接阶段,因此对象文件会保留在周围。如果您的程序非常简单,并且有许多源文件,这是很好的,因为它加快了编译时间

您可以使用选项-v verbose查看GCC命令行的完整输出:

注:

cc1是真正的C编译器的内部名称,它将转储程序集文件。 as是将程序集转换为对象文件的汇编程序。 p collect2是链接器的内部名称,用于读取对象文件和库并创建最终可执行文件。
这有一百万个原因。您必须使它更具体。通常,如果您使用命令行编译器直接将一个.c文件编译为可执行文件,而不使用-c或/c标志,则不会保留任何.o文件。
$ 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