Каковы различия между Autotools, Cmake и Scons?
Каковы различия между Autotools, Cmake и Scons?
Ответы:
По правде говоря, «единственная реальная« изящество »экономии Autotools заключается в том, что именно этим в основном пользуются все проекты GNU.
Проблемы с автоинструментами:
Это работает ... большую часть времени ... это все, что вы можете сказать об Autotools. Это система, которая решает несколько проблем, которые действительно касаются только проекта GNU ... для их базового, базового кода инструментария. (Правка (24.05.2014): Следует отметить, что этот тип беспокойства является потенциально ПЛОХОЙ вещью, о которой стоит беспокоиться - сердечное кровотечение частично связано с этим мышлением и с правильными, современными системами, вы действительноЯ не имею никакого дела с тем, что исправляет Autotools. GNU, вероятно, необходимо выполнить тщательное удаление кодовой базы в свете того, что произошло с Heartbleed. Вы можете использовать его для своего проекта, и он может хорошо работать для небольшого проекта, который, как вы ожидаете, не будет работать нигде, кроме Linux или где Ясно, что цепочка инструментов GNU работает правильно. Утверждение, что оно «прекрасно интегрируется с Linux», является довольно смелым и совершенно неверным . Он достаточно хорошо интегрируется с инструментарием GNU и решает проблемы, возникающие у ИТ-специалистов с его целями.
Это не означает, что нет проблем с другими вариантами, обсуждаемыми здесь.
SCons - это скорее замена для Make / GMake / etc. и выглядит довольно красиво, учитывая все обстоятельства, однако ...
Примеры, приведенные для CMake в этой теме, немного обманчивы.
Тем не мение...
По правде говоря, ваши цели должны диктовать, что вы выбираете здесь.
Существует множество причин, по которым многие проекты отказываются от qmake, Autotools и т. Д. И переходят на CMake. До сих пор я вполне мог ожидать, что проект на основе CMake либо попадет в ситуацию кросс-компиляции, либо на установку VisualStudio, либо потребуется лишь небольшая очистка, потому что проект не учитывает только компоненты Windows или OSX. в кодовую базу. Я не могу ожидать, что в проекте, основанном на SCons, - и я полностью ожидаю, что 1/3 или более проектов Autotools допустили что-то неверное, что исключает его правильное построение в любом контексте, кроме хоста, создающего один или Scratchbox2.
Важное различие должно быть сделано между тем, кто использует инструменты. Cmake - это инструмент, который должен использовать пользователь при создании программного обеспечения. Автоинструменты используются для создания архива дистрибутива, который можно использовать для сборки программного обеспечения, используя только стандартные инструменты, доступные в любой SuS-совместимой системе. Другими словами, если вы устанавливаете программное обеспечение из архива, созданного с помощью автоинструментов, вы не используете автоинструменты . С другой стороны, если вы устанавливаете программное обеспечение , которое использует CMake, то будут с помощью CMake и должна установить его для создания программного обеспечения.
Подавляющему большинству пользователей не нужно устанавливать автоинструмент на свой компьютер. Исторически сложилось так, что много путаницы было вызвано тем, что многие разработчики распространяли неправильно сформированные архивы, которые вынуждали пользователя запускать autoconf для регенерации скрипта configure, и это является ошибкой упаковки. Больше путаницы было вызвано тем фактом, что большинство основных дистрибутивов Linux устанавливают несколько версий автоинструментов, когда они не должны устанавливать ни одну из них по умолчанию. Еще большую путаницу вызывают разработчики, пытающиеся использовать систему контроля версий (например, cvs, git, svn) для распространения своего программного обеспечения, а не для создания tar-архивов.
asciidoc
или, help2man
или doxygen
, что важно, правильная комбинация автоинструмента. Это было огромной маркетинговой проблемой для автоинструментов. Пользователи ошибочно думают, что им нужно установить autoconf, потому что они не понимают разницы между tarball и VCS.
Это не о стандартах кодирования GNU.
В настоящее время преимущества autotools - особенно при использовании с automake - в том, что они очень хорошо интегрируются с созданием дистрибутива Linux.
Например, для cmake это всегда "мне нужно -DCMAKE_CFLAGS или -DCMAKE_C_FLAGS?" Нет, это не так, это "-DCMAKE_C_FLAGS_RELEASE". Или -DCMAKE_C_FLAGS_DEBUG. Это сбивает с толку - в autoconf это просто ./configure CFLAGS = "- O0 -ggdb3" и у вас это есть.
При интеграции с инфраструктурами сборки проблема scons не может использоваться make %{?_smp_mflags}
, _smp_mflags
в данном случае это макрос RPM, который примерно расширяется до (может установить администратор) мощности системы. Люди помещают такие вещи, как -jNCPUS, через свое окружение. С scons это не работает, поэтому пакеты, использующие scons, могут быть только встроенными в дистрибутивы.
./configure CFLAGS=-O0
часто происходит сбой с пакетами, которые перезаписывают CFLAGS в make-файле и вместо этого требуют запуска пользователя ./configure --enable-debug
. (например tmux
).
Что важно знать об Autotools, так это то, что они не являются общей системой сборки - они реализуют стандарты кодирования GNU и ничего более. Если вы хотите создать пакет, соответствующий всем стандартам GNU, то Autotools - отличный инструмент для работы. Если вы этого не сделаете, то вы должны использовать Scons или CMake. (Например, см. Этот вопрос .) Это распространенное недоразумение - то, откуда большинство разочарований в Autotools.
AUTOMAKE_OPTIONS = -foreign
вашего Makefile.am
. (Или -foreign
в вашем autogen.sh
. Я думаю, что почти все используют это.)
installcheck
и distclean
. Если вы пытаетесь изменить такое поведение, все еще используя Autotools, то вы просто теряете время.
Хотя с точки зрения разработчиков, cmake в настоящее время является наиболее простым в использовании, с точки зрения пользователя, автоинструменты имеют одно большое преимущество.
autotools генерирует один скрипт конфигурации файла, и все файлы для его генерации поставляются вместе с дистрибутивом. это легко понять и исправить с помощью grep / sed / awk / vi. Сравните это с Cmake, где в / usr / share / cmak * / Modules найдено много файлов, которые пользователь не может исправить, если у него нет прав администратора.
Таким образом, если что-то не совсем работает, его обычно можно легко «исправить» с помощью стандартных инструментов Unix (grep / sed / awk / vi и т. Д.) Способом кувалды, не разбираясь в системе сборки.
Вы когда-нибудь копались в вашем каталоге сборки cmake, чтобы выяснить, что не так? По сравнению с простым шеллскриптом, который можно прочитать сверху вниз, проследить за сгенерированными файлами Cmake, чтобы выяснить, что происходит, довольно сложно. Также, с CMake, адаптация файлов FindFoo.cmake требует не только знания языка CMake, но также может потребовать привилегий суперпользователя.