目标文件(存储在 Obj 中的文件)是尚未链接的已编译二进制文件。将其视为最终可执行文件的片段,稍后将它们组合成您的可执行文件。
编译源代码时,每个源文件都会松散地编译为一个目标文件。为什么?没有理由*,只是您的特定编译器是如何编写的。其他语言中的其他编译器不会这样做,而是一步将所有内容编译成一个大型二进制文件。但是编写您的编译器的人决定首先编译为单独的目标文件。
现在,您可以想象,如果每个源文件生成一个目标文件,那么每次编译代码时,您的源目录最终会变得凌乱并充满大量 .obj 文件(实际上很多 C 编译器传统上都是这样做的)。随着时间的推移,从事大型项目的开发人员开始编写编译脚本或配置他们的项目以将所有 .obj 文件收集在一个目录中,以减少源目录的混乱。
编写您的编译器的人显然喜欢单独的 Obj 目录的想法,因此他们将其作为项目的默认配置。至于为什么会有一个 x86 子目录,那是因为您的编译器还支持其他 CPU,例如 ARM(适用于 Android、Win Phone 7 和 iPhone),并且还可以区分 32 位和 64 位。
* 注意:实际上有一些很好的理由这样做,包括使编译器代码更加模块化并支持增量编译,但事实上有些人可以在不生成单独的 obj 文件的情况下完成所有这些工作,这意味着这主要是由编译器的开发人员不仅仅是必需品。