Автоинструменты против CMake для компиляции Windows и Linux - PullRequest
36 голосов
/ 30 апреля 2011

Я искал плюсы и минусы Автоинструментов и CMake. Но я хотел бы узнать мнение людей, которые использовали один (или оба) из этих инструментов для проектов.

Я использовал Autotools в основном год назад, и я знаю, что одним из положительных моментов является то, что он основан на сценариях оболочки, поэтому его не нужно устанавливать для запуска и он использует сценарии переносимых оболочек. Но похоже, что он слишком ориентирован на Unix, и было бы невозможно запустить файл конфигурации в Windows.

Теперь мне нужно выбрать системный инструмент для проекта с открытым исходным кодом , который должен быть скомпилирован как минимум для Linux и Windows. Он написан на C ++ и использует интерфейс Qt GUI, остальная часть является «универсальной».

Спасибо за помощь.

Ответы [ 2 ]

72 голосов
/ 25 июля 2014

Обновлено 16 января 2019 года: уточнены советы по мере развития инструментов.

Раньше я пользовался автоинструментом в течение значительного времени.

В настоящее время я интенсивно использую мезон и cmake только тогда, когда мне это нужно.

Несколько личных советов:

  1. для больших команд, придерживайтесь CMake, если вы хотите использовать генераторы для XCode. Если вам это не нужно, я бы использовал Meson напрямую. Meson, начиная с версии 0.49, также поддерживает поиск файлов конфигурации CMake (хотя я еще не проверял, насколько хорошо это работает). Кроме того, Visual Studio на данный момент достаточно хорошо поддерживается, хотя, опять же, я не пытался сам. Преимущество CMake в том, что он имеет интеграцию с Visual Studio.

  2. Удаление автоинструментов. Мезон уже хорошо все покрывает. Их модель кросс-компиляции удивительно понятна. В CMake, в прошлый раз, когда я проверял, все было гораздо сложнее.

Я также пробовал scons , waf и tup .

Наиболее полнофункциональная, кроссплатформенная система - CMake, но DSL от meson будет проще использовать людям, привыкшим к python и другим. Meson также начинает поддерживать VS (генератор VS2015), и некоторые проекты уже имеют экспериментальную поддержку для этого, например, gstreamer. Gstreamer компилируется в окнах также с мезонами. Прямо сейчас есть генератор VS2015 и VS2017, но я в последнее время не пробовал себя в генераторах. Начиная с meson 0.37.1 требовалась некоторая работа, но они улучшаются, и текущая версия уже составляет 0,40.

Мезон

Плюсы:

  • DSL вообще не мешает. На самом деле, это очень мило и знакомо, основано на python.
  • Хорошо продуманная поддержка кросс-компиляции.
  • Все объекты строго типизированы: вы не можете легко делать ошибки подстановки строк, так как объекты - это такие объекты, как «зависимость», «включающий каталог» и т. Д.
  • Очень понятно, как добавить модуль для одного из ваших инструментов.
  • Кросс-компиляция кажется более простой в использовании.
  • Действительно хорошо продуманный. Дизайнер и главный писатель Meson знает, что он очень хорошо говорит о проектировании системы сборки.
  • Очень, очень быстро, особенно в инкрементных сборках.
  • Документация в 10 раз лучше, чем то, что вы можете найти в cmake. Зайдите на страницу http://mesonbuild.com и вы найдете учебник, инструкции и хороший справочник. Он не идеален, но действительно обнаружим.

Минусы:

  • Не настолько зрелый, как CMake, однако, я считаю, что он уже полностью пригоден для C ++.
  • Не так много доступных модулей, хотя gnome, qt и обычные уже есть.
  • Генераторы проекта: кажется, генератор VS не работает так хорошо, как сейчас. Генераторы проектов CMake гораздо более зрелые.
  • Имеет зависимость от python3 + ninja.

Cmake

Плюсы:

  • Генерирует проекты для множества различных IDE. Это очень хорошая функция для команд.
  • Хорошо играет с инструментами Windows, в отличие от автоинструментов.
  • Зрелый, почти де-факто стандарт.
  • Microsoft работает над интеграцией CMake для Visual Studio.

Минусы:

  • Он не соответствует общеизвестным стандартам или рекомендациям.
  • Нет цели удаления.
  • DSL - это странно, когда вы начинаете делать сравнения и тому подобное, и строки со списком или экранирующие символы, вы будете делать много ошибок, я почти уверен.
  • Кросс-компиляция - отстой.

Autotools

Плюсы:

  • Самая мощная система для кросс-компиляции, ИМХО.
  • Сгенерированным сценариям не нужно ничего, кроме make, оболочки и, если вам нужно, компилятора.
  • Командная строка действительно хороша и последовательна.
  • Стандарт в мире Unix, множество документов.
  • Действительно мощная командная строка: смена каталогов установки, удаление, переименование бинарных файлов ...
  • Если вы ориентируетесь на Unix, источники пакетовс этим инструментом действительно удобно.

Минусы:

  • Это не будет хорошо работать с инструментами Microsoft.Настоящий showtopper.
  • Кривая обучения ... ну ... Но на самом деле я могу сказать, что CMake тоже не был таким простым.
  • Использование рекурсивного make широко распространено в унаследованных проектах,Automake поддерживает нерекурсивные сборки , но этот подход не очень широко используется.

Что касается кривой обучения, есть два очень хороших источника для изучения:

Первый источник поможет вам быстрее начать работу.Книга является более углубленным обсуждением.

Из Scons, waf и tup, Scons и tup больше похожи на make.Waf больше похож на CMake и autotools.Сначала я попробовал waf вместо cmake.Я думаю, что он слишком силен в том смысле, что у него есть полный ООП API.Сценарии совсем не выглядели короткими, и это действительно сбивало меня с толку рабочим каталогом и связанными с ним вещами.В конце я обнаружил, что автоинструменты и CMake - лучший выбор.Мой любимый из этих 3 систем сборки - это tup.

Tup

Pros

  • Действительно верно.
  • Безумно быстро .Вы должны попытаться в это поверить.
  • Язык сценариев опирается на очень простую идею, которая может быть понята за 10 минут.

Минусы

  • У него нет полнофункциональной конфигурации.
  • Я не смог найти способ создания целей, таких как doc, так как они генерируют файлы, о которых я не знаю, и они должны быть перечислены ввывод перед созданием, или, по крайней мере, это мой вывод на данный момент.Это было действительно досадное ограничение, если оно есть, поскольку я не уверен.

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

32 голосов
/ 30 апреля 2011

Я бы не рекомендовал автоинструмент для Windows. Используйте CMake.

Почему? В Windows нет собственного sh.exe, и эмуляция идет медленно. Также очень легко ошибиться в настройках. Я не говорю, что это невозможно в CMake, но CMake наверняка отвлечет больше, так что вы беспокоитесь о меньшем. Документация по CMake может быть немного трудной для чтения, но после ее настройки вам будет хорошо работать со всеми инструментальными цепями, когда-либо поддерживаемыми CMake. CMake также включает тестирование, упаковку и т. Д. *

Autotools работает медленно в Windows, не так легко работает с MSVC и имеет странные причуды с Windows (и другими ОС), которые трудно отладить и сложно исправить. libtool также плохо работает с Windows, где она часто отказывается создавать общую библиотеку, даже если вы думаете, что должны и могли. Проблемы с перемещением инструментальной цепочки также распространены в libtool, который может искать неправильные файлы в пользовательской инструментальной цепочке. CMake намного проще в этом отношении. Он предполагает обычные вещи о целевой платформе и создает общие и хорошие инструкции по сборке.

Кроме того, CMake имеет цветной вывод :) и хорошие проценты прогресса.

PS: У меня просто есть некоторый опыт работы с CMake и autotools в Windows как пользователь. CMake работает, autotools откусывает ваше ухо, когда вы не смотрите, и улыбается вам, когда он выходит из строя из-за какой-то странной ошибки ...

...