Автоинструменты против CMake для компиляции Windows и Linux
Я искал плюсы и минусы Автоинструментов и CMake. Но я хотел бы узнать мнение людей, которые использовали один (или оба) из этих инструментов для проектов.
Я использовал Autotools в основном год назад, и я знаю, что одним из положительных моментов является то, что он опирается на сценарии оболочки, поэтому его не нужно устанавливать для запуска и использует переносимые сценарии оболочки. Но похоже, что он слишком ориентирован на Unix, и было бы невозможно запустить файл конфигурации в Windows.
Теперь мне нужно выбрать системный инструмент для проекта с открытым исходным кодом, который должен быть скомпилирован как минимум для Linux и Windows. Он написан на C++ и использует интерфейс Qt GUI, остальная часть является "общей".
Спасибо за помощь.
Ответы
Ответ 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 только тогда, когда мне это нужно.
Несколько личных советов:
-
для больших команд придерживайтесь CMake, если вы хотите использовать генераторы для XCode. Если вам это не нужно, я бы использовал Meson напрямую. Meson, начиная с версии 0.49, также поддерживает поиск файлов конфигурации CMake (хотя я еще не проверял, насколько хорошо это работает). Кроме того, Visual Studio на данный момент достаточно хорошо поддерживается, хотя, опять же, я не пытался сам. Преимущество CMake в том, что он имеет интеграцию с Visual Studio.
-
Падение автоинструментов. Мезон уже хорошо все покрывает. Их модель кросс-компиляции удивительно понятна. В 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, но в нем отсутствует инфраструктура конфигурации, что означает, что она усложняет ситуацию, когда вам нужны все эти вещи. С другой стороны, это действительно быстро.