Ответ 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.