2009-12-18 4 views
41

Несколько лет назад я изучил использование некоторой системы сборки, которая не является Make, а инструменты вроде CMake и SCons казались довольно примитивными. Я хотел бы узнать, улучшилась ли ситуация. Так, в соответствии со следующими критериями, что в настоящее время лучший инструмент для сборки:В настоящее время самая лучшая система сборки

  • платформа агностик: должна работать на Windows, Linux, Mac OS
  • от языка: должны иметь встроенную поддержку для общих вещей, как строить C/C++ и другие статические языки. Думаю, ему не нужно поддерживать полный комплект автозагрузки.
  • extensible: Мне нужно иметь возможность писать правила для генерации файлов, например, из реструктурированного текста, латекса, пользовательских форматов и т. Д. Мне действительно не нравится, на каком языке я должен писать правила, но я бы предпочел реальный язык, чем DSL.
  • Я бы предпочел, чтобы не писать какие-либо XML вручную, что я думаю, например, ant.
  • свободно доступен (желательно с открытым кодом)

Термин «лучше» немного субъективен, но я думаю, что ответы могут быть оценены объективно указанными выше критериями.

+0

Я смущен. Вы говорите: «ему не нужно поддерживать полный набор автоустановок». Означает ли это, что ваш вопрос следует перефразировать: «Какая следующая лучшая система сборки после autoconf/automake?» –

+0

@William Pursell: Нет. Я явно отказываюсь от необходимости поддержки autoconf и automake, так как он настолько тесно связан с Makefiles. –

+1

Я не вижу ничего плохого в исходном вопросе или в результате обсуждения. Учитывая, что этот вопрос теперь является ключевым поисковым движком для «лучшей системы сборки», этот вопрос следует вновь открыть. Я мог бы понять, как закрыть его, если обсуждение действительно было упрямо или если оно действительно привлекло спам, но это не так. – user1110743

ответ

23

Я окончательно проголосовал за premake. Хотя это не так сильно, как старшие братья, главное преимущество - абсурдная простота и простота использования. Делает запись многокомпилирующего компилятора, многоплатформенного кода простым и генерирует решения Visual Studio, проекты XCode, Makefiles и другие, без какой-либо дополнительной работы.

+0

Выглядит очень хорошо. Тем не менее, похоже, что он не поддерживает много «из коробки»? –

+2

И Premake внедряет интерпретатор Lua, который, по моему мнению, является более мощным языком сценариев, чем у CMake. – Splo

+1

И не нужно загружать интерпретатор Python для Windows, например, Scons или Waf. – Splo

-1

Final Builder хорошо известен в мире Windows,

+3

Я не думал упоминать, что он должен быть бесплатным (желательно, как в речи). Я задал вопрос. –

+0

Ничего себе. Несмотря на то, что это похоже на программу только для загрузки, они используют значки, напоминающие мне о окне Vista, которое невозможно понять. – Ken

0

Проект Селена двигается к Rake, не потому, что его лучше, но потому, что он обрабатывает несколько языков немного лучше, чем все другие инструменты сборки и кросс-платформенный (разработана в Ruby).

Все инструменты сборки имеют свои проблемы, и люди учатся жить с ними. То, что работает на JVM, как правило, очень хорошо для создания приложений, так Ant, Maven (я знаю его отвратительное), Ivy, Rake

6

CMake

CMake является расширяемой с открытым исходным кодом системы, управляет процессом сборки в операционной системе и в автономном режиме .

+0

У меня возникли проблемы с окнами несколько лет назад. Они исправлены? –

+0

Я только недавно начал использовать его, и у меня не было проблемы. Учитывая, что MySQL использует его для своих сборок Windows, я не вижу серьезных проблем. –

+2

CMake намного лучше, чем autotools, но он по-прежнему использует свой собственный DSL, и я вижу это как препятствие: вам нужно инвестировать в изучение нового языка. По этой причине я бы пошел на такие решения, как Waf (Python) или Rake (Ruby). – sorin

13

Итак, судя по критериям, изложенным в вопросе, система сборки, которая кажется наилучшим образом подходит, вероятно, waf - чистый Python, обеспечивает поддержку C++ и других языков, общий, мощный, а не DSL.


Однако, исходя из моего личного опыта, я предпочитаю CMake для проектов на C++. (Я попробовал CMake, SCons и waf, и понравился им примерно в таком порядке). CMake - общее решение, но у него встроенная поддержка C++, которая делает его более приятным, чем более общее решение, когда вы на самом деле выполняете C++.

Модель сборки CMake для C++ более декларативная и менее настоятельная, и, следовательно, для меня проще в использовании.Синтаксис языка CMake невелик, но декларативная сборка с нечетным синтаксисом превосходит обязательную сборку в Python. Из трех, CMake также, похоже, имеет лучшую поддержку «продвинутых» вещей, таких как предварительно скомпилированные заголовки. Настройка предварительно скомпилированных заголовков сократила время восстановления примерно на 70%.

Другие плюсы для CMake включают приличную документацию и значительное сообщество. Многие библиотеки с открытым исходным кодом имеют файлы сборки CMake либо в дереве, либо предоставляются сообществом CMake. Существуют крупные проекты, которые уже используют CMake (OGRE приходит на ум), а другие крупные проекты, такие как Boost и LLVM, находятся в процессе перехода на CMake.

Часть вопроса, который я обнаружил при экспериментировании с системами сборки, заключается в том, что я пытался создать плагин NPAPI на OS X, и выясняется, что очень мало систем сборки настроены так, чтобы XCode обеспечивало точное сочетание флагов для этого. CMake, признавая, что XCode является сложной и движущейся целью, обеспечивает крючок для ручной настройки команд в сгенерированных проектах XCode (и, я думаю, Visual Studio). Это очень хорошо, насколько я могу судить.

Независимо от того, строите ли вы библиотеку или приложение, вы также можете определить, какая система сборки лучше. Boost по-прежнему использует систему на основе Jam, отчасти потому, что она обеспечивает самую полную поддержку для управления типами сборки, которые сложнее, чем «Debug» и «Release». Большинство ускорительных библиотек имеют пять или шесть различных версий, особенно в Windows, предвосхищая людей, которым нужны совместимые библиотеки, которые связаны с различными версиями ЭЛТ.

У меня не было никаких проблем с CMake в Windows, но, конечно, ваш пробег может отличаться. Есть достойный графический интерфейс для настройки зависимостей сборки, хотя он неуклюже используется для перестроек. К счастью, есть также клиент командной строки. До сих пор я решил иметь тонкую оболочку Makefile, которая вызывает CMake из objdir; Затем CMake генерирует Makefiles в objdir, а исходный Makefile использует их для выполнения сборки. Это гарантирует, что люди не случайно ссылаются на CMake из исходного каталога и загромождают свой репозиторий. В сочетании с MinGW этот «сэндвич CMake» обеспечивает замечательную совместимость с кросс-платформенным построением!

+0

Я должен это повторить. MacOSX и CMake - это просто не решение, если у вас есть качество (используя инструменты, такие как поддержка интернационализации). Я буду мигрировать нашу систему сборки в один прекрасный день, она в настоящее время работает приемлемым для простого английского только приложения – Lothar

+0

WAF - это ужасный код низкого качества. Невозможно продлить или даже прочитать (мне было интересно, запутан ли он специально, но что бы это ни было, это единственная версия). Невозможно отладить или предсказать, что он собирается делать. Это шутка программы по разработке программного обеспечения, просто хромающее кодирование Python, смешанное с гротескным генератором кода времени исполнения, где это абсолютно не нужно. Aaaand ... у него есть книга, написанная об этом * facepalm *. – wvxvw

12

Конечно, это зависит от ваших приоритетов. Если вы ищете в первую очередь для простоты использования, есть, по крайней мере, две новые системы сборки, которые подключаются к файловой системе, чтобы автоматически отслеживать зависимости в агностическом языке.

Один стро:

http://gittup.org/tup/

и другой сфабриковать:

http://code.google.com/p/fabricate/

тот, который, кажется, лучший исполнительский, портативный, и зрелые (и один Я фактически использовал) tup. Парень, который написал его, даже поддерживает игрушечный дистрибутив linux, где все это подмодуль git, и все (включая ядро) построено с помощью tup. Из того, что я читал о системе сборки ядра, это вполне достижимо.

Кроме того, Tup очищает старые цели и другие трещины и может автоматически поддерживать ваши файлы .gitignore. В результате становится тривиальным экспериментировать с макетом и именами ваших целей, и вы можете уверенно перепрыгивать между версиями git без восстановления всего. Это написано на C.

Если вы знаете, Haskell и ищете что-то для очень сложных случаев использования, проверить сотрясение:

http://community.haskell.org/~ndm/shake/

Update: Я не пробовал, но этот новый «buildsome» инструмент также крюки в файловой системе, и был вдохновлен туп, так актуальна:

https://github.com/ElastiLotem/buildsome

+0

Я понимаю, что redo вообще не подключается к файловой системе, но только tup и makeate делают. –

2

Gradle, кажется, соответствует всем критериям, указанным выше.

Это система сборки, которая взяла лучшее из Maven и Ant вместе взятых. Для меня это самое лучшее.

-2

smooth build соответствует большинству ваших требований.

  • платформа агностик: да, это написано в Java
  • зависит от конкретного языка: он не поддерживает C/C++ т еще, только Java, но это расширяемый с помощью плагинов, написанных на Java, так что добавление больше компиляторов поддержки не проблема
  • расширяемый: да, вы можете реализовать плавную функцию через плагин java, вы также можете создать гладкую функцию, определив ее как выражение, построенное из других гладких функций.
  • Я бы предпочел, чтобы избежать написания XML, вы не увидите ни одной строчки его в гладкой сборки
  • свободно доступны: да, Apache 2 лицензии

раскрытие: Я автор гладкая сборка.

Смежные вопросы