Время от времени попадаются сообщения о том, что очередной проект перебирается на build-систему CMake. Вот и сегодня в блоге Стива Хьюстона (Steve Huston, один из разработчиков ACE) прочитал о том, что на CMake перебирается проект Apache Qpid (это OpenSource реализация протокола AMQP). Некоторое время назад на CMake, если не ошибаюсь, перебрался проект KDE. А сейчас еще ходят слухи о том, что на CMake будет перебираться Boost (что не может не радовать, т.к. я никогда не понимал, как можно пользоваться Boost.Build-ом).
Загадкой для меня является то, что CMake пользуется таким успехом. На мой вкус, build-система для кроссплатформенных C++ проектов должна:
- давать разработчику одинаковую среду на любой платформе;
- позволять записывать проектные файлы в виде небольших программ (с обязательной возможностью использовать if-ы, циклы, различные операции над переменными).
С этими критериями CMake справляется, на мой взгляд, не слишком. Во-первых, CMake является генератором проектных файлов. Т.е., под Linux-ом я должен сгенерировать make-файлы и запускать make. Под Visual Studio – проектные файлы и devenv. Во-вторых, CMake предоставляет свой язык программирования, который выглядит не слишком эстетично. Т.е. на троечку по каждому пункту. В отличии от, например, SCons, Rake и моего Mxx_ru. Ведь SCons, Rake, Mxx_ru сами управляют компиляцией (не требуется генерация нативных проектных файлов) и проекты записываются в виде программ на нормальных языках программирования (Python в случае SCons, Ruby в случае Rake и Mxx_ru).
Тем не менее, CMake по популярности, как мне представляется, уделывает нас всех. Вопрос: почему?
Может быть, здесь работает принцип “Worse is Better”?
Или же CMake как раз предоставляет разработчикам то, что я ошибочно считаю чем-то малозначащим? Например, я не пользуюсь IDE и, поэтому, для меня генерация проектных файлов VisualStudio – это пустой звук. Но, наверное, для значительного количества программистов это огромное достоинство CMake: они получают возможность комфортной работы в привычной для себя среде… Опять же, с проектами VisualStudio работает IncrediBuild (из коробки)… И может быть визуальная убогость языка программирования в CMake для многих вовсе не является недостатком… В общем, хотелось бы знать ответ :)
Несколько ссылок на тему build-систем:
PS. Несколько слов об Mxx_ru. В последнее время мой проект развивается “по просьбам трудящихся”. Т.е. новые возможности в нем появляются только когда меня об этом просят. Это не из-за того, что я утратил интерес к проекту, а из-за нехватки времени. Поскольку приходится разрываться между кормящими меня проектами на работе, SObjectizer и Mxx_ru (а ведь есть еще и несколько других важных для меня проектов, в частности, ObjESSty), то жертвовать приходится развитием Mxx_ru. Впрочем, как только появится достаточно стабильная версия Ruby 1.9, я обязательно портирую Mxx_ru 1.4 под нее. Ведь переход на Ruby 1.9 сулит серьезные преимущества. Во-первых, можно надеяться на увеличение скорости работы. Во-вторых, может быть под Ruby 1.9 будет гораздо проще реализовать распараллеливание компиляции больших проектов. Так что пока Mxx_ru жив! :)
PPS. Кстати, кто-нибудь знает, как можно вносить изменения в англоязычную Wikipedia? Там регистрироваться нужно, проходить какую-то процедуру одобрения внесенных на страничку изменений? А то появилось желание добавить Mxx_ru к списку build-систем.