Несколько лет назад я изучил использование некоторой системы сборки, которая не является Make
, и инструменты как CMake и SCons казались довольно примитивными. Я хотел бы узнать, улучшилась ли ситуация. Так, под следующими критериями, что в настоящее время является лучшим инструментом сборки:
ant
требует.Термин "лучший" немного субъективен, но я думаю, что ответы могут быть оценены объективно критериями выше.
Я бы окончательно проголосовал за предварительную версию . Хотя он не такой мощный, как его старшие братья, его главное преимущество - абсурдная простота и удобство использования. Упрощает написание мультиплатформенного и мультиплатформенного кода, а также генерирует решения Visual Studio, проекты XCode, Makefile и т. Д. Без какой-либо дополнительной работы.
CMake - это расширяемая программа с открытым исходным кодом. система, которая управляет процессом сборки в операционной системе и в независимо от компилятора
Проект Selenium переходит на Rake не потому, что он лучший, а потому, что он работает с несколькими языками немного лучше, чем все другие инструменты сборки, и является кроссплатформенным (разработан в Ruby).
У всех инструментов сборки есть свои проблемы, и люди учатся жить с ними. Что-то, что работает на JVM, очень хорошо подходит для создания приложений, поэтому Ant , Maven (я знаю, что это ужасно), Ivy , Rake
Итак, если судить чисто по критериям, изложенным в вопросе, система сборки, которая кажется наиболее подходящей, вероятно, waf - чистый Python, обеспечивает поддержку C ++ и другие языки, общие, мощные, не DSL.
Однако, исходя из моего личного опыта, я предпочитаю CMake для проектов C ++. (Я пробовал CMake, SCons и waf, и мне они понравились примерно в таком порядке). CMake - это общее решение, но оно имеет встроенную поддержку C ++, что делает его лучше, чем более общее решение, когда вы на самом деле работаете с C ++.
Модель сборки CMake для C ++ является более декларативной и менее императивной, и, следовательно, мне проще в использовании. Синтаксис языка CMake не очень хорош, но декларативная сборка с нечетным синтаксисом превосходит императивную сборку в Python. Из трех CMake, кажется, также лучше всего поддерживает " Я думаю). Насколько я понимаю, это очень умно.
Создаете ли вы библиотеку или приложение, также может определить, какая система сборки лучше. Boost по-прежнему использует систему на основе пробелов, отчасти потому, что она обеспечивает наиболее полную поддержку для управления типами сборки, более сложными, чем «Отладка» и «Выпуск». Большинство расширенных библиотек имеют пять или шесть разных версий, особенно в Windows, поэтому людям нужны совместимые библиотеки, которые связываются с разными версиями CRT.
У меня не было никаких проблем с CMake в Windows, но, конечно, ваш опыт может отличаться . Есть приличный графический интерфейс для настройки зависимостей сборки, хотя его неудобно использовать для повторных сборок. К счастью, есть еще и клиент командной строки. Что я' Пока что я остановился на создании тонкой оболочки Makefile, которая вызывает CMake из объекта objdir; Затем CMake создает файлы Makefile в objdir, и исходный Makefile использует их для сборки. Это гарантирует, что люди не вызовут случайно CMake из исходного каталога и не засорят свой репозиторий. В сочетании с MinGW этот «сэндвич CMake» обеспечивает удивительно согласованный опыт кроссплатформенной сборки!