очень логичная и высокоуровневая штука, намного круче cmake и других
но если правила сложнее чем cpp -> exe, то уже нужно очень хорошо знать кучу тонкостей мега-кривого bjam-а, на котором оно почему-то написано (правда, сейчас дописывают порт на питон), перелопатить кучу сорцев итд. зато если в проекте действительно сложные взаимопревращения целей, то потом будет можно легко и _очень масштабируемо все написать
простые случаи конечно не требуют много усилий, но имхо кажутся заклинаниями без знания всго буст.билда
пример: хрен вы на cmake так же логично опишите, скажем, такой случай: http://omploader.org/vMmt5aw
где, например, то что генерится из одного файла xpod, потом вместе собирается в одну цель
а если сборка проекта более-менее обычна, то cmake и учить легче, чем boost.build, и возможностей его хватит, и использовать будет по-удобней
Рекомендую SCons. Там изначально все на Питоне.
Я юзал его, когда с использованием различных *make не удавалось лаконично описать правила сборки в большом проекте.
пример: хрен вы на cmake так же логично опишите, скажем, такой случай: http://omploader.org/vMmt5aw где, например, то что генерится из одного файла xpod, потом вместе собирается в одну цель
А это сложный случай? ИМХО с этим справится и обычный make.
Makefile:
html: png pod
touch html
gv:
touch gv
xpod:
touch xpod
dot: gv xpod
touch dot
dia:
touch dia
png: dot dia
touch png
pod: xpod
touch pod
clean:
rm -f gv xpod dot dia png pod html
$ make
touch gv
touch xpod
touch dot
touch dia
touch png
touch pod
touch html
Где-то так, конкретные команды генерации разписывать нет смысла. По идее, CMake тоже должен уметь, если он может генерировать Makefile.
>с этим справится и обычный make
тут у вас недописано кое-что. html, png, pod - это что? это файлы. а нужно описать преобразования типов, чтобы из всех xpod генерились png и pod, а потом именно из этих конкретных сгенеренных файлов вместе собирался html. а если вы в make напишете образцы, то получится, что из любых png + pod генерится html, что тоже не то. так что make придется генерить - для каждой цепочки целей по такому куску, как вы написали.
то есть абстрагируемся от: файлов (цель более общее понятие), опций компиляторов/программ, проектов, итд. в scons цели - файлы, тулы - набор переменных, опции - строки. он проще.
поправьте, если не так - scons знаю не слишком хорошо, только читал доки, да попробовал пару примеров. интересно послушать, у меня курсовая на эту тему ;)
Сравниваются make, ant, scons, jam, boost::jam и т.п.
В целом выводы, вкратце: Jam и Boost::build очень быстрые, но "рецепты" писать трудновато, как только начинаются расширения , навороты, и т.п.
Scons/Waf неплохой, но довольно медленный. Make файлы быстры, но нужно не забывать про "recursive makefiles considered harmful", b генерировать их каким-то bakefiles.
> в scons цели - файлы, тулы - набор переменных, опции - строки. он проще.
это не совсем так: там есть abstract builder, который пишется на том же питоне -- строится DAG, вычисляются сигнатуры, гарантируется корректность/"воспроизводимость" билдов.
В Waf примерно тоже самое, только Waf быстрее и компактнее Scons.