Введение

В разработке программного обеспечения CMake является кросс-платформенным бесплатным программным обеспечением с открытым исходным кодом для автоматизации, тестирования, упаковки и установки программного обеспечения с использованием независимого от компилятора метода. CMake не является самой системой сборки; он генерирует файлы сборки другой системы. Он поддерживает иерархию каталогов и приложения, которые зависят от нескольких библиотек. Он может использовать собственные среды сборки, такие как Make, Qt Creator, Ninja, Android Studio, Apple Xcode и Microsoft Visual Studio.

История

Разработка CMake началась в 1999 году в ответ на потребность в кроссплатформенной среде для Insight Segmentation and Registration Toolkit (ITK). функции, добавленные Брэдом Кингом и GE Corporate R&D для поддержки DART. Дополнительные функции были созданы, когда VTK перешел на CMake для своей среды сборки и поддержки ParaView. Версия 3.0 была выпущена в июне 2014 года. Это было описано как начало "современного CMake". Эксперты советуют избегать переменных в пользу целей и свойств. Команды , , , которые были в основе CMake 2 должны быть заменены конкретными командами. Разработчик Брэд Кинг заявил, что "C" в CMake означает "cross platform".

Отдельное дерево сборки

Одной из его основных особенностей является возможность размещать выходы компилятора (например, файлы объектов) в дерево сборки, которое находится за пределами дерева исходного кода.

Поддержка конфигурации IDE

CMake может генерировать файлы проектов для нескольких популярных IDE, таких как Microsoft Visual Studio, Xcode и Eclipse CDT. Он также может создавать скрипты сборки для MSBuild или NMake на Windows; Unix Make на Unix-подобных платформах, таких как Linux, macOS и Cygwin; и Ninja как на Windows, так и на Unix-подобных платформах.

Обнаружение функций компилятора

CMake позволяет определять функции, которые компилятор должен поддерживать, чтобы получить целевую программу или библиотеку.

Компиляторы

CMake поддерживает обширный список компиляторов, включая: Apple Clang, Clang, GNU GCC, MSVC, Oracle Developer Studio и Intel C++ Compiler.

Система упаковки

Несмотря на то, что CMake не является менеджером пакетов, он предоставляет основные модули (см. CPack) для установки бинарных файлов и информации о пакетах, заявленных скриптом, которые будут использоваться потребительскими проектами CMake. Пакет также может быть упакован в архивный файл для менеджера пакетов или установщика, поддерживаемого целевой платформой. Пакеты третьих сторон также могут быть импортированы через конфигурированные файлы CMake, которые либо предоставляются той же третьей стороной, либо создаются вручную.

ГУИ

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

Процесс создания

Создание программы или библиотеки с помощью CMake - это процесс в два этапа. Генератор, указанный пользователем на командной строке, определяет, какую цепочку инструментов для создания использовать. Старый подход сейчас не рекомендуется.

Типы целей построения

В зависимости от CMakeLists. txt конфигурации файлы сборки могут быть либо исполняемыми файлами, либо библиотеками (например, ), библиотеки файлов объектов или псевдоцели (включая псевдоимена). CMake может создавать файлы объектов, которые могут быть связаны с исполняемыми бинарными файлами / библиотеками, избегая динамической (время выполнения) связывания и используя вместо этого статическую (время компиляции) связывание. Это позволяет гибкость в конфигурации различных оптимизаций. Зависимости построения могут быть определены автоматически.

Предварительно составленные заголовки

Можно создавать предварительно скомпилированные заголовки с помощью CMake с версии 3.6.

CMakeLists.txt (полное имя)

CMake имеет относительно простой интерпретируемый императивный язык сценариев. Он поддерживает переменные, методы манипулирования строками, массивы, функции/макро декларации и включение модулей (импорт). Команды (или директивы) языка CMake читаются из файла с именем Этот файл определяет исходные файлы и параметры сборки, которые CMake поместит в спецификацию сборки проекта (например, Makefile). Кроме того, файлы с суффиксом могут содержать скрипты, используемые CMake. Для создания файлов сборки проекта вызывается в терминале и указывается каталог, который содержит данный файл.

Строки JSON

CMake поддерживает извлечение значений в переменные из строк данных JSON (с версии 3.19).

Внутренние

Язык сценариев CMake реализован с использованием генераторов Yacc и Lex. Исполняемые программы CMake, CPack и CTest написаны на языке программирования C++. Большая часть функциональности CMake реализована в модулях, написанных на языке CMake. С релиза 3.0 документация CMake использует разметку reStructuredText. HTML-страницы и страницы руководства создаются генератором документации Sphinx.

Усыновление

CMake был очень широко принят среди коммерческих, открытых программ и академических программных проектов. Некоторые известные пользователи включают Android NDK, Netflix, Inria, MySQL, Boost (библиотеки C++), KeePassXC, KDE, KiCAD, FreeCAD, Webkit, Blender, Biicode, ReactOS, Apache Qpid, эксперимент ATLAS и Second Life.

Привет, мир.

Следующие файлы исходного кода демонстрируют, как создать простую программу hello world, написанную на C++ с помощью CMake.