В этой статье я познакомлю вас с системой сборки с открытым исходным кодом, которая может помочь вам ускорить время компиляции при сборке проектов 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.