Все или почти все (а если вам не повезло) нам пришлось скомпилировать программу из исходного кода. На самом деле, в большинстве проектов для установки программы достаточно выполнить ./configure && make && make install, но мы увидим разные альтернативы:
Сделать GNU
GNU Make - это низкоуровневая система компиляции, в которой настроено несколько вещей и тесты не выполняются:
Плюсы:
- Очень распространенный
- Просто понять
- Быстро
Минусы:
- Немного настраиваемый
- Трудно поддерживать
- Не проводит тесты
make
BSD сделать
BSD Make - это еще одна версия Make, которая в настоящее время используется операционными системами * BSD. Он отличается от GNU Make, поскольку является наиболее полной по функциональности программой BSD Make, хотя и менее распространен.
Плюсы:
- Быстро
- Просто понять
- Больше возможностей, чем GNU Make
Минусы:
- Не распространен в мире Linux
- Не проводит тесты
- Немного настраиваемый
- Трудно поддерживать
make
Автоинструменты
Autotools - это официальная система GNU, которая генерирует сценарий под названием configure, который мы должны вызвать, чтобы сгенерировать соответствующий файл GNU Make Makefile. Он широко используется, однако все больше и больше людей (включая меня) думают, что он слишком громоздкий, сложный, медленный и не очень совместимый.
Плюсы:
- Легко настраиваемый
- Очень распространенный
Минусы:
- Небольшая переносимость между системами, отличными от UNIX
- Выполните слишком много тестов (проверьте ВСЕ, и ВСЕ есть ВСЕ)
- Очень медленно при настройке
- Плохая обратная совместимость
./configure && make
CMake
(Моя предпочтительная система) CMake - это система, которая компенсирует недостатки Autotools во многих аспектах, таких как их ужасная обратная совместимость и переносимость. Также улучшаются тестовые системы, которые легко настраиваются под нужды каждого проекта. Дело в том, что все больше и больше проектов используют CMake, например KDE, PortAudio, Ogre3D и т. Д. Мы можем распознать этот тип систем благодаря файлу CMakeLists.txt, который будет генерировать Makefile или проект для Eclipse или CodeBlocks.
Плюсы:
- Быстро
- Отличная кроссплатформенная поддержка
- Вы можете определить тесты очень настраиваемым способом
Минусы:
- Сначала трудно понять
- Вы должны работать с абстракцией, которая поначалу может показаться пугающей
- Распространение мало, хотя постепенно растет
cmake . && make
Вопрос-производитель
QMake - это система, разработанная Trolltech для компиляции проектов, сделанных на Qt. Таким образом, qmake уделяет большое внимание Qt и обычно является форматом, используемым IDE, такими как QtCreator. Он довольно популярен в проектах Qt, но не встречается за пределами этой среды:
Плюсы:
- Очень хорошо интегрирован с Qt
- Быстро
- Хорошая мультиплатформенность в Qt
Минусы:
- Нечасто вне приложений Qt
qmake . && make
SCons
SCons - это система на основе Python для компиляции проектов C / C ++. В отличие от Autotools, CMake или QMake; SCons не создает Makefile. SCons очень легко модифицируется, но, пожалуй, самый медленный в простых операциях.
Плюсы:
- Легкая модификация
- Пройдите честные испытания
Минусы:
- Небольшой разброс
- Замедлять
scons
Буст Джем
Boost.Jam - это версия Perforce Jam, которая используется в популярных библиотеках C ++ Boost, хотя систему компиляции можно использовать отдельно. В отличие от GNU Make, Boost.Jam использует Jamfiles, которые являются улучшенной версией Makefiles. Они довольно популярны в среде BeOS / Zeta / Haiku.
Плюсы:
- Быстро
- Самый короткий написать
Минусы:
- Небольшой разброс
- Сложность выполнения тестов
bjam
Ниндзя
Ninja - это система, разработанная Google для обеспечения сверхбыстрой системы сборки, изначально разработанной для проекта Chromium. Ninja не спроектирован таким образом, чтобы его можно было легко модифицировать, по словам его авторов, необходимо найти систему, генерирующую Ninja. Рекомендуемые - CMake и gyp.
Плюсы:
- Муй рапидо
Минусы:
- Вам нужна другая система, чтобы вызвать ниндзя
- Небольшой разброс
ninja
другие
Вы можете использовать любую другую систему, такую как собственный скрипт bash или python. Существуют также генераторы для других неродных языков, которые можно использовать, например Gradle, Maven, gyp и т. Д.
Make - это не система компиляции, это генератор двоичных файлов (или целей) из исходного кода. Его также можно использовать как средство выполнения задач.
Я не согласен с вами в том, что программа make BSD шире по функциональности, make GNU более полная, она имеет больше функций. И я говорю это по собственному опыту, в BSD мне всегда нужно устанавливать GNU make, потому что BSD make очень проста по сравнению с GNU make.
Я согласен с вами, что Autotools довольно громоздкий, я предпочитаю просто использовать Makefile. Make-файлы, созданные Autotools, сложно отлаживать.
Привет!
Спасибо за комментарий!
На мой взгляд, GNU make всегда была более традиционной и верной исходной программе make, а BSD make всегда была более инновационной, но, возможно, я заметил другие вещи при сравнении.
Автоинструменты - действительно большая головная боль. Как разработчик операционной системы Haiku мне приходилось портировать программное обеспечение с помощью автоинструментов, и это ад. Есть немало случаев, когда я создавал Makefile или CMakeLists.txt, прежде чем исправлять этот беспорядок.
В настоящее время я использую Premake4, очень легко настраиваемый и простой на основе сценариев Lua. Взгляните, если вы этого не знаете.
Поздравляю со статьей, простой и лаконичный, отличный справочник.
'make check' используется для проверки компиляции после использования make
приветствия