cpp - не компилятор.
Обилие версий - от развития компиляторов и сопутствующих утилит, как то включения поддержки новых стандартных вещей, исправления ошибок и прочего.
Требование компилировать конкретной версией (скорее серией, ака gcc-3.xx например) компилятора... Странное, причины этого требования нужно выяснять у разработчика конкретной программы. Может быть связано с использованием закрытых компонент, например, скомпилированных под конкретную серию, т.е. ограничения накладываются ABI, либо изменением поведения компилятора при работе с конкретными конструкциями языка (выбрасывание поддержки устаревших, ака deprecated вещей) и прочая, и прочая...