Каковы различия между Autotools, Cmake и Scons?

В чем отличия между Autotools, Cmake и Scons?

Ответ 1

По правде говоря, единственная реальная "экономическая благодать" Autotools - это то, что в основном используют все проекты GNU.

Проблемы с Autotools:

  • Truly ARCANE m4 macro синтаксис в сочетании с многословным, скрученным сценарием оболочки для тестов на "совместимость" и т.д.
  • Если вы не обращаете внимания, вы будете испортить способность кросс-компиляции (It следует отметить, что Nokia придумала Scratchbox/Scratchbox2 для сторонних высоко сломанных установок сборки Autotools для Maemo/Meego.) Если вы по какой-либо причине имеете фиксированные статические пути в своих тестах, вы собираетесь сломать поддержку кросс-компиляции, потому что она не будет соблюдать вашу спецификацию sysroot, и она вытащит материал из вашей хост-системы. Если вы нарушаете поддержку кросс-компиляции, это делает ваш код непригодным для таких вещей, как OpenEmbedded и делает его "забавным" для дистрибутивов, пытающихся создать свои релизы на кросс-компиляторе, а не на цели.
  • ОГРОМНОЕ количество тестов для проблем с древними, сломанными компиляторами, которые НЕТХОД в настоящее время использует с почти чем-либо производством в этот день и возраст. Если вы не создаете нечто вроде glibc, libstdС++ или GCC на действительно древней версии Solaris, AIX и т.п., Тесты являются пустой тратой времени и являются источником многих, многих потенциальных поломки вещей, как указано выше.
  • Довольно сложный процесс получения установки Autotools для создания полезного кода для системы Windows. (Хотя я мало использую Windows, это вызывает серьезную озабоченность, если вы разрабатываете предполагаемый межплатформенный код.)
  • Когда он сломается, вы потратите ЧАСЫ, преследуя ваш хвост, пытаясь разобраться в том, что кто-то написал сценарий неправильно, чтобы разобраться в вашей сборке (На самом деле, это то, что я Я пытаюсь сделать (или, вернее, полностью вырвать Autotools), я сомневаюсь, что в оставшейся части этого месяца достаточно времени, чтобы разобраться в беспорядке...) для работы сейчас, когда я набираю это. Apache Thrift имеет один из тех систем BROKEN, которые не будут перекрестно скомпилировать.)
  • "Обычные" пользователи на самом деле НЕ, которые просто делают "./configure; make" - для многих вещей они собираются достать пакет, предоставленный кем-то, например, из PPA или их дистрибьютор. "Обычные" пользователи не являются разработчиками и во многих случаях не захватывают архивы. Это снобизм на всех, чтобы предположить, что это будет так. Типичные пользователи для tarballs - разработчики, которые делают что-то, поэтому они собираются захлопнуться со сломанностью, если они там.

Это работает... в большинстве случаев... это все, что вы можете сказать об Autotools. Это система, которая решает несколько проблем, которые действительно касаются только проекта GNU... для их базового ключевого кода инструментальной цепочки. (Редактировать (24.05.2014): Следует отметить, что этот тип беспокойства представляет собой потенциально BAD вещь, о которой нужно беспокоиться - Heartbleed частично вытекает из этого мышления и с помощью правильных современных систем, вы на самом деле не имеют никакого бизнеса, занимающегося большей частью того, что исправляет Autotools. GNU, вероятно, должно сделать крутое удаление кода, в свете того, что произошло с Heartbleed). Вы можете использовать его для выполнения своих проект, и он может хорошо работать для небольшого проекта, который вы не ожидаете работать нигде, кроме Linux, или где функциональная цепочка GNU явно работает правильно. Утверждение о том, что он "прекрасно интегрируется с Linux", является довольно смелым утверждением и довольно неправильным. Он хорошо интегрируется с GNU-инструментами и решает проблемы, с которыми ИТ-специалисты сталкиваются с целями.

Это не означает, что проблем с другими вариантами, обсуждаемыми в этом потоке, нет.

SCons больше заменяет Make/GMake/etc. и выглядит довольно красиво, все рассмотрено, однако...

  • Это еще больше инструмент POSIX. Вероятно, вы, возможно, более легко получите MinGW для создания файлов Windows с этим, чем с помощью Autotools, но он по-прежнему более ориентирован на работу с POSIX, и вам нужно будет установить Python и SCons для его использования.
  • У этого есть проблемы, делающие кросс-компиляцию, если Вы не используете что-то вроде Scratchbox2.
  • Допустимо медленнее и менее стабильнее, чем CMake от их собственного сравнения. Они приходят с половинчатым (сторона POSIX нуждается в make/gmake для сборки...) негативов для CMake по сравнению с SCons. (В стороне, если вам нужно THATмного расширяемости по сравнению с другими решениями, вы должны спрашивать себя, слишком ли сложен ваш проект...)

Примеры, заданные для CMake в этом потоке, немного фиктивные.

Однако...

  • Вам нужно будет изучить новый язык.
  • Там контр-интуитивные вещи, если вы привыкли к Make, SCons или Autotools.
  • Вам нужно установить CMake в систему, для которой вы строите.
  • Вам понадобится твердый компилятор С++, если у вас нет предустановленных двоичных файлов.

По правде говоря, ваши цели должны диктовать то, что вы выбираете здесь.

  • Вам нужно иметь дело с LOT сломанных инструментальных цепей, чтобы создать действующий рабочий двоичный файл? Если да, вы можете рассмотреть Autotools, осознавая недостатки, о которых я упоминал выше. CMake может справиться с этим, но он меньше беспокоится об этом, чем Autotools. Скобки могут быть расширены, чтобы беспокоиться об этом, но это не ответ на вопрос.
  • Вам нужно беспокоиться о целях Windows? Если это так, Autotools должен быть буквально из-за работы. Если это так, SCons может/не быть хорошим выбором. Если это так, CMake решительный выбор.
  • Вам нужно беспокоиться о кросс-компиляции (универсальные приложения/библиотеки, такие как Google Protobufs, Apache Thrift и т.д. ДОЛЖЕН заботиться об этом...)? Если это так, Autotools может работать для вас, пока вам не нужно беспокоиться о Windows, но вы собираетесь потратить много времени на поддержание вашей системы настройки, поскольку на вас все изменится. В настоящий момент SCons практически не работает, если вы не используете Scratchbox2 - у него действительно нет дескриптора кросс-компиляции, и вам понадобится использовать эту расширяемость и поддерживать ее так же, как и вы будете с Automake. Если это так, вы можете захотеть рассмотреть CMake, поскольку он поддерживает кросс-компиляцию без каких-либо забот о утечке из песочницы и будет работать с/без чего-то вроде Scratchbox2 и интегрирует красиво с такими вещами, как OpenEmbedded.

Существует множество причин, по которым многие проекты выкалывают qmake, Autotools и т.д. и переходят к CMake. До сих пор я вполне могу ожидать, что проект на основе CMake либо перейдет в ситуацию с кросс-компиляцией, либо в настройку VisualStudio, либо потребуется лишь небольшая очистка, потому что проект не учитывал только компоненты Windows или OSX к кодовой базе. Я не могу рассчитывать на это из проекта, основанного на SCons, и я полностью ожидаю, что 1/3 или более проектов Autotools получили бы SOMETHING, что исключает возможность его построения в любом контексте, кроме здания хоста или Scratchbox2.

Ответ 2

Должно быть важное различие между тем, кто использует эти инструменты. Cmake - это инструмент, который должен использоваться пользователем при создании программного обеспечения. Autotools используются для создания tarball-дистрибутива, который можно использовать для создания программного обеспечения, используя только стандартные инструменты, доступные в любой системе, совместимой с SuS. Другими словами, если вы устанавливаете программное обеспечение из tarball, которое было создано с помощью autotools, вы не используете autotools. С другой стороны, если вы устанавливаете программное обеспечение, использующее Cmake, то вы используете Cmake и должны установить его для сборки программного обеспечения.

Подавляющему большинству пользователей нет необходимости устанавливать на своем устройстве автозапуск. Исторически сложилось так, что много путаницы было вызвано тем, что многие разработчики распространяют неправильные tarballs, которые заставляют пользователя запускать autoconf для восстановления конфигурации script, и это ошибка упаковки. Больше путаницы было вызвано тем фактом, что большинство основных дистрибутивов Linux устанавливают несколько версий autotools, когда они не должны устанавливать какие-либо из них по умолчанию. Еще больше путаницы вызывается разработчиками, пытающимися использовать систему управления версиями (например, cvs, git, svn) для распространения своего программного обеспечения, а не для создания архивов.

Ответ 3

Это не о стандартах кодирования 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, могут быть только сериализованы в дистрибутивах.

Ответ 4

Что важно знать об Autotools, так это то, что они не являются общей системой сборки - они реализуют стандарты кодирования GNU и ничего больше. Если вы хотите сделать пакет, который следует за всеми стандартами GNU, то Autotools - отличный инструмент для работы. Если вы этого не сделаете, вы должны использовать Scons или CMake. (Например, см. этот вопрос.) Это распространенное недоразумение - это то, где большая часть разочарования с помощью Autotools происходит.

Ответ 5

В то время как с точки зрения разработчиков, cmake в настоящее время является самым простым в использовании, с точки зрения пользователя, у ауттулов есть одно большое преимущество.

autotools генерирует один файл configure script, и все файлы для его создания отправляются вместе с дистрибутивом. это легко понять и исправить с помощью grep/sed/awk/vi. Сравните это с Cmake, где много файлов найдено в /usr/share/cmak */Модулях, которые не могут быть исправлены пользователем, если у него нет доступа администратора.

Итак, если что-то не совсем работает, его обычно легко "фиксировать" с помощью стандартных инструментов Unix (grep/sed/awk/vi и т.д.) в режиме кувалды без необходимости понимать сборку.

Вы когда-нибудь выкапывали свой каталог сборки cmake, чтобы узнать, что не так? По сравнению с простым shellscript, который можно читать сверху вниз, после сгенерированных файлов Cmake, чтобы выяснить, что происходит, довольно сложно. Кроме того, с помощью CMake адаптация файлов FindFoo.cmake требует не только знания языка CMake, но также может потребовать привилегии суперпользователя.