Подтвердить что ты не робот

Автоинструменты против CMake для компиляции Windows и Linux

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

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

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

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

4b9b3361

Ответ 1

Я бы не рекомендовал autotools для 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 имеет тенденцию укусить ваш урок, когда вы не смотрите, и улыбаться вам, когда он терпит неудачу из-за какой-то странной ошибки...

Ответ 2

Обновлено 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. Настоящий шоу-стоппер.
  • Кривая обучения... ну... Но на самом деле я могу сказать, что CMake тоже не был таким простым.

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

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

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

баба

Pros

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

Cons

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

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