Компіляційні системи. Окрім простої конфігурації, зробіть, встановіть

Усі або майже всі (і якщо вам не пощастило) нам довелося скомпілювати програму з вихідного коду. Насправді в більшості проектів достатньо виконати ./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, який ми повинні викликати, щоб створити відповідний файл Make з GNU Make. Він широко використовується, проте все більше і більше людей (включаючи і мене) вважають, що він занадто громіздкий, складний, повільний і не дуже сумісний.

Плюси:

  • Високо налаштований
  • Дуже поширений

Мінуси:

  • Невелика портативність між системами, що не є 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 не створює файл Make. SCons дуже модифікується, але він, мабуть, найповільніший у простих операціях
Плюси:

  • Легка модифікація
  • Пройдіть чесні випробування

Мінуси:

  • Мале поширення
  • Lento

scons

Boost Jam

Boost.Jam - це версія Perforce Jam, яка використовується в популярних бібліотеках C ++ Boost, хоча систему компіляції можна використовувати окремо. На відміну від GNU Make, Boost.Jam використовує Jamfiles, які є вдосконаленою версією Makefiles. Вони досить популярні в середовищі BeOS / Zeta / Haiku.

Плюси:

  • Швидко
  • Найкоротший для написання

Мінуси:

  • Мале поширення
  • Труднощі з виконанням тестів

bjam

ніндзя

Ninja - це система, розроблена Google для забезпечення надшвидкої системи збірки, спочатку розробленої для проекту Chromium. Ninja не спроектований таким чином, щоб його легко модифікувати, за словами його власних авторів, слід знайти систему, яка генерує Ninja. Рекомендованими є CMake та gyp.

Плюси:

  • Muy rápido

Мінуси:

  • Вам потрібна інша система, щоб породити Ніндзя
  • Мале поширення

ninja

інші

Ви можете використовувати будь-яку іншу систему, таку як ваш власний скрипт bash або python. Існують також генератори для інших не рідних мов, які можна використовувати, такі як Gradle, Maven, gyp тощо.