オブジェクト ファイル (Obj に格納されているファイル) は、リンクされていないコンパイル済みのバイナリ ファイルです。これは、後で結合して実行可能ファイルを作成する最終的な実行可能ファイルのフラグメントと考えてください。
ソース コードをコンパイルすると、各ソース ファイルは大まかに 1 つのオブジェクト ファイルにコンパイルされます。なんで?理由はありません*、特定のコンパイラがどのように作成されたかだけです。これを行わず、代わりにすべてを 1 つのステップで 1 つの大きなバイナリにコンパイルする他の言語のコンパイラがあります。しかし、あなたのコンパイラを書いた人々は、最初に別々のオブジェクト ファイルにコンパイルすることに決めました。
ここで、各ソース ファイルが 1 つのオブジェクト ファイルを生成する場合、コードをコンパイルするたびにソース ディレクトリが乱雑になり、大量の .obj ファイルでいっぱいになることを想像できます (実際、多くの C コンパイラは伝統的にこれを行っていました)。時間が経つにつれて、大規模なプロジェクトに取り組んでいる開発者は、コンパイル スクリプトを記述したり、プロジェクトを構成してすべての .obj ファイルを 1 つのディレクトリに集めたりして、ソース ディレクトリが乱雑にならないようにするようになりました。
あなたのコンパイラを書いた人々は、別の Obj ディレクトリのアイデアを明らかに気に入ったので、それをプロジェクトのデフォルト構成にしました。x86 サブディレクトリがある理由については、コンパイラが ARM (Android、Win Phone 7、iPhone 用) などの他の CPU もサポートし、32 ビットと 64 ビットを区別するためです。
* 注: 実際には、コンパイラ コードをよりモジュール化し、インクリメンタル コンパイルをサポートするなど、これを行うにはいくつかの非常に正当な理由がありますが、個別の obj ファイルを生成せずにすべてのことを実行できる人もいるという事実は、ほとんどが開発者による設計上の決定であることを意味します。必要以上にコンパイラの開発者。