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