+1 за "Многие, и они ужасны".
Но наиболее «богатым» и «наиболее масштабируемым» является, вероятно, CMake , который является генератором Makefile (также генерирует собственный MSVC ++ *.proj
/ *.sln
). Странный синтаксис, но как только вы его изучите, он может позволить вам сгенерировать сборки для разных платформ. Если бы я «начал заново», я бы, наверное, использовал CMake
. Он должен обрабатывать ваш список, хотя ваша «генерация кода» может занять «собственную жизнь» за пределами системы сборки, в зависимости от того, что вы хотите сделать. (Увидеть ниже.)
Для простых проектов генератор QMake в порядке (вам не нужно использовать библиотеки Qt для использования QMake). Но вы не описываете «простой» - генерация кода и «дополнительные фазы» означают, что вы, вероятно, хотите CMake
или что-то с богатым API для ваших собственных расширений, например Scons
(или Waf
).
Мы используем Scons на работе. Он производит «пуленепробиваемые сборки», но он действительно медленный. Ни одна другая система не будет такой пуленепробиваемой, как Scons
. Но это медленно. Он написан на Python, и мы расширили интерфейс для нашей «организации рабочего пространства» (где мы просто указываем зависимости модуля), и это является частью Scons
замысла проекта (этот тип расширения через Python). Удобно, но сборки идут медленно. Вы получаете пуленепробиваемые сборки (любой ящик разработчика может сделать финальную версию), но это медленно. И это медленно. Не забывайте, что если вы используете Scons
, это медленно. И это медленно.
Мне больно думать, что десятилетие после 2000 года у нас все еще нет летающих автомобилей. Возможно, нам придется ждать еще сто лет или что-то, чтобы получить их. И тогда мы все, вероятно, будем летать на наших летающих машинах, которые все еще строятся с дерьмовыми системами сборки.
Да, они все ужасны.
[О ПОКОЛЕНИИ КОДА]
Scons
работает на «фазах», и они «несколько статичны». Он может создавать код, который генерируется как часть сборки (люди делают это несколькими разными способами), но это было описано как «нечто очень не похожее на Scons».
Если это просто «предварительно обработать некоторые файлы и сгенерировать исходные файлы», то ничего страшного (у вас много вариантов, и именно поэтому qmake
было написано - для moc
предварительной обработки *.hpp/*.cpp
файлов).
Тем не менее, если вы делаете это в «тяжелой манере», вам нужно будет написать собственный сценарий. Например, у нас были скрипты «как часть сборки», которые запрашивали базы данных и генерировали классы C ++ для взаимодействия между «слоями» (в традиционной 3-уровневой разработке приложений). Аналогичным образом мы сгенерировали исходный код сервера / клиента с помощью IDL и встроенную информацию о версии, чтобы несколько клиентов / серверов могли работать одновременно с разными версиями (для одного и того же «клиента» или «сервера»). Много сгенерированного исходного кода. Мы могли бы «притвориться», что это «система сборки», но на самом деле это нетривиальная инфраструктура для «управления конфигурацией», частью которой является «система сборки». Например, эта система должна была «снять» и «