В этой статье я познакомлю вас с системой сборки с открытым исходным кодом, которая может помочь вам ускорить время компиляции при сборке проектов C ++.

Ninja - это легкая система сборки, предназначенная для использования преимуществ доступных ядер ЦП на вашем компьютере для эффективного создания исполняемых файлов и библиотек из исходного кода. Принцип его работы очень похож на GNU Make. То есть он принимает входные файлы, сгенерированные системой сборки высокого уровня, такой как CMake, и как можно быстрее превращает их в библиотеки и исполняемые файлы.

Следующее определение взято с официального сайта:

Ninja - это небольшая система сборки, ориентированная на скорость. Он отличается от других систем сборки в двух основных отношениях: он предназначен для того, чтобы его входные файлы генерировались системой сборки более высокого уровня, и он предназначен для максимально быстрого запуска сборки.

Установить

Вы можете установить Ninja с помощью менеджеров пакетов:

Linux

  • Debian / Ubuntu: apt-get install ninja-build
  • Арка: pacman -S ninja
  • Fedora: dnf install ninja-build

Mac

  • HomeBrew: brew install ninja
  • MacPorts: port install ninja

Или соберите исходный код, загрузив один из релизов из репозитория Github. Последний выпуск 1.9.0 содержит готовые предварительно скомпилированные двоичные файлы для 64-битных Linux, Mac OS X и Windows.

Привет, мир!

Разница между Ninja и другими системами сборки заметна при создании больших проектов. Однако давайте посмотрим на следующей демонстрации, как Ninja работает с CMake. Давайте создадим эту простую программу HelloWorld:

После создания исходного кода мы переходим к созданию для него файла CMakeLists.txt. Назовем наш проект HelloWorld и установим версию C ++ на 14. CMakeLists.txt будет выглядеть так:

Чтобы сгенерировать файлы сборки Ninja, нам нужно запустить CMake с флагом -G Ninja. Выполните в терминале следующую команду:

$ cmake -G Ninja

CMake сгенерирует собственные файлы кеша / настроек, build.ninja и rules.ninja. На этом изображении показаны выходные файлы:

После создания необходимых конфигураций мы можем начать сборку проекта, просто набравninja:

$ ninja

Вы должны увидеть исполняемый файл с именем HelloWorld, созданный в каталоге, как показано на этом изображении:

Инкрементальная сборка

В следующий раз, когда мы изменим код, нам не нужно будет запускать команду для CMake. Все, что нам нужно, это снова набрать ninja, и запускается новая сборка.

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

Понравилась история?

Хлопайте в ладоши, подписывайтесь на меня на Medium и Twitte r и попробуйте Ninja, когда у вас будет время. Обратная связь всегда приветствуется!

Обо мне

Меня зовут Ильяс Хамадуш, старший инженер-программист компании Elektrobit Automotive. Интересуюсь автомобильным программным обеспечением и встроенными системами. Следуйте за мной в Twitter и LinkedIn.