Это компромисс
(Вы сами это уже поняли;))
Для большинства проектов клиенту не важно, сколько файлов установлено, но он заботится о том, сколько функций выполнено вовремя. Упрощение жизни для разработчиков приносит пользу и пользователю.
Еще несколько причин для DLL
Некоторые библиотеки не очень хорошо работают вместе в одной сборке, но их можно заставить вести себя в DLL (например, одна DLL может использовать WTL3, а другая требует WTL8).
Некоторые из DLL могут содержать компоненты для загрузки в другие исполняемые файлы (глобальные хуки, расширения оболочки, дополнения браузера).
Некоторые из DLL могут быть сторонними, доступны только как DLL.
Возможно повторное использование внутри компании - даже если вы видите только один «общедоступный» продукт, он может использоваться в дюжине внутренних проектов, использующих эту DLL.
Некоторые из библиотек DLL могли быть построены в другой среде, доступной не всем разработчикам в компании.
Автономный EXE или установленный продукт
Многие продукты в любом случае не будут работать как отдельный исполняемый файл. Они требуют установки, и пользователь не трогает вещи, которых он не должен трогать. Наличие одного или нескольких двоичных файлов не имеет значения.
Влияние времени строительства
Возможно, вы недооцениваете влияние времени сборки и сохраняете стабильную сборку для больших проектов. Если сборка занимает хотя бы 5 минут, вы могли бы сказать, что это означает: «заставьте разработчиков думать заранее, вместо того, чтобы возиться, пока все не будет работать нормально». Но это серьезный пожиратель времени, который серьезно отвлекает.
Трудно улучшить время сборки одного проекта. Работая на VC9, распараллеливание сборки внутри одного проекта шатко, как и инкрементный компоновщик. Время соединения особенно трудно "оптимизировать" на более быстрых машинах.
Независимость разработчика
Еще одна вещь, которую вы можете недооценивать.
Чтобы использовать DLL, вам нужны .dll и .h.
Чтобы скомпилировать и связать исходный код, вам обычно нужно настроить включающие каталоги, выходные каталоги, установить сторонние библиотеки и т. Д. Это действительно больно.