Всички или почти всички (и ако нямате късмет) трябваше да компилираме програма от изходния код. Всъщност в повечето проекти е достатъчно да направите ./configure && make && make install, за да инсталирате програмата, но ще видим различните алтернативи:
GNU Make
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
Q Направи
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
Усилване на Jam
Boost.Jam е версия на Perforce Jam, която се използва в популярните C ++ Boost библиотеки, въпреки че системата за компилация може да се използва отделно. За разлика от GNU Make, Boost.Jam използва Jamfiles, които са подобрена версия на Makefiles. Те са доста популярни в средата BeOS / Zeta / Haiku.
Плюсове:
- Бързо
- Най-краткото за писане
Недостатъци:
- Малко разпространение
- Трудност при извършване на тестове
bjam
Ninja
Ninja е система, разработена от Google, за да осигури ултра бърза система за изграждане, първоначално проектирана да бъде тази на проекта Chromium. Ninja не е проектиран да бъде лесен за модифициране, според собствените му автори трябва да се намери система, която генерира Ninja. Препоръчителни са CMake и gyp.
Плюсове:
- Muy rápido
Недостатъци:
- Нуждаете се от друга система, за да създадете Ninja
- Малко разпространение
ninja
други
Можете да използвате всяка друга система, като вашия собствен bash или python скрипт. Има и генератори за други чужди езици, които могат да се използват като Gradle, Maven, gyp и т.н.
Make не е система за компилация, тя е генератор на двоични файлове (или цели) от своя изходен код. Може да се използва и като бегач на задачи.
Различавам се с вас, че BSD make е по-широк по функционалност, GNU make е по-пълен, има повече функционалност. И казвам това от собствения си опит, в BSD винаги трябва да инсталирам GNU make, защото BSD make е много проста в сравнение с GNU make.
Съгласен съм с вас, че Autotools е доста тромав, предпочитам просто да използвам Makefile. Гребните файлове, генерирани от Autotools, са трудни за отстраняване на грешки.
Поздрави!
Благодаря за коментара!
Според мен GNU make винаги е бил по-традиционен и верен на оригиналната програма за make, а BSD make винаги е бил по-иновативен, но може да съм забелязал и други неща при сравнението.
Автоинструментите наистина са голямо главоболие. Като сътрудник на операционната система Haiku трябваше да пренасям софтуер с автоинструменти и това е ад. Малко са случаите, в които в крайна сметка създадох Makefile или CMakeLists.txt, преди да поправя тази бъркотия.
В момента използвам Premake4, много конфигурируем и опростен въз основа на скриптове Lua. Погледнете, ако не го знаете.
Поздравления за статията, проста и кратка, отлична справка.
'make check' се използва за проверка на компилацията след използване на make
Поздравления