Движок с нуля
Справочник

Сборщик

Программа, которая по готовому списку дел запускает компилятор для каждого .cpp, а потом линкер. При повторной сборке сборщик компилирует только то, что изменилось.

Чтобы из main.cpp получился app.exe, нужно запустить две программы с правильными флагами: cl.exe, а потом link.exe. Для одного файла это можно сделать руками. В движке файлов будут сотни, и набирать для каждого команду никто не станет.

Запускать компилятор и линкер для каждого файла поручают сборщику. Сборщик получает список дел — какие файлы компилировать, с какими флагами, что потом склеить — и выполняет этот список:

  1. для каждого .cpp запускает компилятор и получает .obj;
  2. запускает линкер и склеивает .obj в программу;
  3. в следующий раз смотрит, какие файлы поменялись, и компилирует только их.

Сам список дел сборщик не придумывает. Список дел пишет CMake из твоего CMakeLists.txt: CMake — как прораб, который составляет план работ, а сборщик — бригада, которая по плану работает. Для какого сборщика писать план, решает генератор.

Сборщик Где берётся Его список дел
MSBuild входит в Visual Studio app.vcxproj
Ninja маленькая отдельная программа, тоже есть внутри Visual Studio build.ninja
Make классический сборщик Linux и macOS; на Windows отдельно, в Visual Studio его нет Makefile