Какие есть альтернативы make для linux/freebsd?
Какие альтернативы сделать для linux/freebsd?
Ответы (11)
Мне нравится SCons. Он устроен таким образом, что каждый скрипт сборки (файл SConstruct
) также является синтаксически допустимой программой Python. Таким образом, вы можете встроить произвольную логику Python в свой скрипт сборки, если вам это нужно.
Это также намного быстрее, чем make
, и автоматически вычисляет многие виды зависимостей.
Мой первый вопрос будет, что такое аудитория. Это для создания внутреннего программного обеспечения, которое будет создавать только ваша команда? Если да, изучите некоторые из уже представленных вариантов. Если это то, что будут создавать другие, либо придерживайтесь make, либо используйте инструмент, который создает makefile и отправляет его. Мы используем autoconf и automake для Linux и других платформ unix. На мой взгляд, вам нужна очень веская причина, чтобы сделать что-то кроме настройки; делать; сделать установку. У Boost есть собственный инструмент (модифицированная версия Jam), и он раздражает меня каждый раз, когда мне нужно попытаться скомпилировать его на необычной машине.
cmake и imake являются утилитами сборки, хотя Imake больше не поддерживается. Cmake также является кроссплатформенным и может использоваться в Windows.
Если вы увлекаетесь Java, ANT — это инструмент сборки, ориентированный на Java (который не действительно хорошо играть с Make).
Troll tech создает инструмент под названием qmake, который они используют для создания QT. Он работает путем создания make-файлов — Troll нуждался в инструменте для поддержки кросс-платформенной сборки — поэтому вам все еще нужна другая утилита make.
Automake :p, который обычно используется в большинстве дистрибутивов приложений Linux, но требует немного больше работы, чем Makefile, но дает лучшие результаты http://www.gnu.org/software/automake/
http://www.openismus.com/documents/linux/automake/automake.shtml ‹-- хорошее объяснение того, как использовать automake и autoconf
make
, потому что в конце концов он генерирует GNUMakefiles. Таким образом, вместо простого синтаксиса make-файла у вас теперь есть довольно старомодные сценарии оболочки и m4
макросы в качестве глазури на торте! Другими словами, теперь у вас есть три проблемы.
- person Roland Smith; 29.08.2015
Если вы ищете что-то совершенно другое, есть Ant. Я сам не очень заинтересован в этом, но он предлагает некоторые преимущества переносимости (не зависит от оболочки unix и т. д.).
Я слышал хорошие отзывы о Jam.
OMake — это инструмент сборки для C/C++, OCaml и LaTeX с автоматическим анализом зависимостей. Он легко может создавать проекты в нескольких каталогах и находит изменения на основе суммы MD5, а не метки времени. У него также есть режим, в котором его можно запускать в фоновом режиме, создавая ваш проект всякий раз, когда файл изменяется. Как правило, для создания обычных типов проектов (программ и библиотек C/C++ или OCaml) требуется меньше кода, чем make. Я не пробовал это для больших проектов.
Обратите внимание, что если вы хотите программировать на OCaml, этот инструмент действительно полезен, поскольку компоновщик OCaml требует, чтобы скомпилированные модули отображались в командной строке в порядке зависимости, и определение этого порядка каждый раз, когда что-то изменяется, нетривиально.
Я использовал CMake для большего количества своих проектов, в том числе для портирования некоторых проектов, основанных на автоинструментах, и могу сказать, что он отлично справляется со своей задачей. Он в основном подходит для кроссплатформенных проектов C/C++.
Проект, над которым я работаю, унаследовал некоторый код, который использует Cons
вместо Make
(не путать с SCons
в ответе Грега Хьюгилла).
Cons
написан на Perl, так же, как SCons
написан на Python. Он автоматически управляет зависимостями, и вы можете использовать любой код Perl внутри скрипта сборки для обработки сложных последовательностей сборки.
Главный недостаток (и основная причина, по которой я сожалею, что мой проект использует его) заключается в том, что Cons
не выполняет параллельные сборки в стиле make -j
. Если вы компилируете несколько файлов, которые не зависят друг от друга, Cons
будет компилировать их по одному, а make -j
будет компилировать их параллельно, что отлично, если на вашей машине несколько ядер и потоков.
Другой make для кросс-платформенных сборок – kmake
(часть kbuild
, по его собственным словам: kBuild — это фреймворк для написания простых make-файлов для сложных задач). Это расширенная версия GNU make
. Он разработан ребятами из VirtualBox. Они используют его для создания своего продукта VirtualBox для Windows, Linux, MacOS и Solaris. Довольно портативный!
Подробнее см. http://svn.netlabs.org/kbuild.
WAF — интересная альтернатива. Написанный на python, он позволяет вам писать логику сборки на простом Python. Параллельные сборки + полуавтоматическое отслеживание зависимостей на основе магических сигнатур работают достаточно хорошо. Он якобы кроссплатформенный (т.е. умеет делать сборки в Windows), но я этого не пробовал.
У него довольно крутая кривая обучения, но он также поставляется с "Книгой WAF" чтобы помочь в этом процессе.
waf
, чтобы решить проблему со сборкой. После просмотра wscript
мне пришлось копаться в коде самого waf
. Это выглядит довольно непитоново. Ради интереса запустил pep8
на последней версии, выдало 6000 ошибок и 25000 предупреждений. Справедливости ради, в последней версии, которую я только что просмотрел, авторы добавили много документации.
- person Roland Smith; 29.08.2015