CMake - CMake
Разработчики) | Энди Седильник, Билл Хоффман, Брэд Кинг, Кен Мартин, Александр Нойндорф |
---|---|
изначальный выпуск | 2000 |
Стабильный выпуск | 3.19.1[1] / 24 ноября 2020 г. |
Репозиторий | |
Написано в | C, C ++[2] |
Операционная система | Кроссплатформенность |
Тип | Инструменты разработки программного обеспечения |
Лицензия | Новый BSD |
Интернет сайт | cmake |
CMake кроссплатформенный бесплатное программное обеспечение с открытым исходным кодом инструмент для управления процесс сборки программного обеспечения используя независимый от компилятора метод. CMake - это не система сборки, а, скорее, ее генератор. Он поддерживает иерархии каталогов и приложения, которые зависят от нескольких библиотек. Он используется вместе с собственными средами сборки, такими как Делать, Qt Creator, Ниндзя, Android Studio, Apple Xcode, и Microsoft Visual Studio. Он имеет минимальные зависимости, требуя только C ++ компилятор в собственной системе сборки.
CMake распространяется как Открытый исходный код программное обеспечение с разрешениями Новый BSD лицензия.[3]
История
Разработка CMake началась в 1999 году в ответ на потребность в кроссплатформенной среде сборки для Набор инструментов для сегментации и регистрации Insight.[4] Проект финансируется Национальная медицинская библиотека США как часть Видимый человеческий проект. Он был частично вдохновлен pcmaker, который был создан Кеном Мартином и другими разработчиками для поддержки Инструментарий визуализации (VTK). В Kitware, Билл Хоффман объединил компоненты pcmaker со своими собственными идеями, стремясь имитировать функциональность Unix настроить скрипты. CMake был впервые реализован в 2000 году и получил дальнейшее развитие в 2001 году.
Дальнейшая разработка и усовершенствования были вызваны включением CMake в собственные системы разработчиков, включая VXL Проект,[требуется разъяснение ] кабель[5] функции, добавленные Брэдом Кингом,[требуется разъяснение ] и Корпоративные исследования и разработки GE за поддержку DART.[требуется разъяснение ] Дополнительные функции были созданы, когда VTK перешел на CMake для среды сборки и для поддержки ParaView.
Версия 3.0 была выпущена в июне 2014 года.[6] Это было описано как начало «Modern CMake».[7]Теперь эксперты советуют избегать переменных в пользу цели и характеристики.[8] Команды add_compile_options
, include_directories
, link_directories
, link_libraries
которые были в основе CMake 2, теперь должны быть заменены целевыми командами.
Функции
CMake может обрабатывать сборки как из исходного кода, так и за его пределами, позволяя использовать несколько сборок из одного дерева исходных кодов и кросс-компиляция. Возможность построить дерево каталогов вне исходного дерева является ключевой функцией, гарантирующей, что в случае удаления каталога сборки исходные файлы исходного кода останутся неизменными.
Гибкая структура проекта
CMake может находить общесистемные и пользовательские исполняемые файлы, файлы и библиотеки. Эти местоположения хранятся в тайник, который затем можно настроить перед созданием файлов целевой сборки. Кэш можно редактировать с помощью графического редактора, который поставляется с CMake.
Сложные иерархии каталогов и приложения, которые полагаются на несколько библиотек, хорошо поддерживаются CMake. Например, CMake может работать с проектом с несколькими наборами инструментов или библиотеками, каждая из которых имеет несколько каталогов. Кроме того, CMake может работать с проектами, которые требуют создания исполняемых файлов перед генерацией кода для компиляции для окончательного приложения. Его расширяемый дизайн с открытым исходным кодом позволяет при необходимости адаптировать CMake для конкретных проектов.[9]
Поддержка конфигурации IDE
CMake может генерировать файлы проектов для нескольких популярных Иды, Такие как Microsoft Visual Studio, Xcode, и Затмение CDT. Он также может создавать сценарии сборки для MSBuild или NMake в Windows; Unix Make на Unix-подобных платформах, таких как Linux, macOS, и Cygwin; и Ниндзя как на Windows, так и на Unix-подобных платформах.
Процесс сборки
Процесс сборки программы или библиотеки с помощью CMake происходит в два этапа. Сначала стандартные файлы сборки создаются (генерируются) из файлов конфигурации (CMakeLists.txt), которые записываются в CMake язык. Затем собственные инструменты сборки платформы (собственный набор инструментов) используются для фактического создания программ.[9][10]
Файлы сборки настраиваются в зависимости от используемого генератора (например, Файлы сборки Unix за делать ). Опытные пользователи могут также создавать и включать дополнительные генераторы make-файлов для поддержки своих конкретных требований к компилятору и ОС. Сгенерированные файлы обычно помещаются (используя cmake
flag) в папку, отличную от исходной, например строить/
.
Каждый проект сборки, в свою очередь, содержит CMakeCache.txt
файл и CMakeFiles
каталог в каждом (под) каталоге проектов (был включен add_subdirectory (...)
команду ранее), помогая избежать или ускорить этап регенерации после его повторного запуска.
Типы целей сборки
В зависимости от конфигурации CMakeLists.txt файлы сборки могут быть либо исполняемыми, либо библиотеками (например, libxyz
, xyz.dll
так далее), объектный файл библиотеки или псевдо-цели (включая псевдонимы). Cmake может создавать объектные файлы, которые могут быть связаны с помощью исполняемых двоичных файлов / библиотек, избегая динамической (во время выполнения) компоновки и вместо этого используя статическую (во время компиляции). Это обеспечивает гибкость в настройке различных оптимизаций.[11]
Язык
Язык CMake относительно прост интерпретированный, функциональный язык сценариев, который поддерживает основные функции, такие как переменные, манипулирование строками, массивы, объявления функций / макросов и включение (импорт) модулей, общие для многих других языков. Команды языка CMake читаются cmake
из CMakeLists.txt
и .cmake
-суффиксированные текстовые файлы (последние рассматриваются как скрипты, а не как генератор файлов инструментальной цепочки).[12]
На этапе создания файлов сборки (для использования в собственной инструментальной цепочке) cmake
принимает в качестве входного пути к каталогу, который содержит CMakeLists.txt
чьи команды, в свою очередь, управляют поведением и выводом CMake. Он содержит одну или несколько команд в форме КОМАНДА (аргументы ...)
, с КОМАНДА
принимая аргументы, объявленные набором переменных или строк, каждая из которых разделена пробел или (необязательно) ключевое слово, относящееся к этой команде. Хотя существует множество встроенных правил (команд) для компиляции программных библиотек (статический и динамичный ) и исполняемые файлы, есть также средства для создания собственных, таких как функции или макросы. Некоторые зависимости сборки могут быть определены автоматически.
Пользователи в основном должны указывать в сценариях, что они собираются построить, используя базовые add_executable(...)
и add_library(...)
команды.[13][14] Оттуда они могут либо настроить поведение компилятора относительно цели, которую они создают, с помощью целевых свойств (начиная с версии v3.1), либо настроить конфигурацию глобально через СОЗДАТЬ _...
префиксные переменные. Последнее не рекомендуется, хотя для конфигураций только для целевых объектов, поскольку такие переменные также используются для настройки самого CMake или установки глобальных начальных значений.[8]
Внутренности
Исполняемые программы CMake, CPack и CTest написаны на C ++ язык программирования.
Большая часть функциональности CMake реализована в модулях, написанных на CMake язык.[15]
Начиная с версии 3.0 в документации CMake используется reStructuredText разметка. HTML-страницы и страницы руководства создаются Сфинкс генератор документации.
Модули
CMake поставляется с многочисленными .cmake
модули, которые, среди прочего, помогают пользователям выполнять рутинную работу, начиная от поиска зависимостей через FindXYZ
модули для тестирования как двоичных файлов, так и среды (зависимости и набор инструментов) и упаковки выпусков с помощью CPack
модуль и cpack
исполняемый файл.[16] CMake также предоставляет импортируемый модуль для управления внешними проектами, называемыми ВнешнийПроект
.[17]
CPack
CPack это упаковка система для распространения программного обеспечения, которая тесно интегрирована с CMake, но может работать без нее.[18][19]
Его можно использовать для генерации:
- Linux Об / мин, деб и gzip распределения обоих двоичные файлы и исходный код.
- NSIS файлы (для Майкрософт Виндоус )
- macOS пакеты
Примеры
Привет, мир
Следующие файлы исходного кода (предполагается, что они помещены в src /
папку) демонстрируют компиляцию основных Привет, мир программа называется Привет
написано на C ++.
// src / Hello_world.cc#включают <iostream>int главный(){ стандартное::cout << "Привет, мир!";}
# src / CMakeLists.txtcmake_minimum_required(ВЕРСИЯ 3.10)# задаем название проектапроект("Привет, мир")# исполняемый файл для компиляцииadd_executable(Привет "Hello_world.cc")
Чтобы CMake работал, вам необходимо запустить следующее трепать скрипт (помещен рядом с src /
папку, предполагая, что вы работаете под Linux на базе ОС и установлены все необходимые зависимости):
#! / usr / bin / env bash # Поместите этот файл рядом с src / foldercmake -S src / -B src.build/ # Создает файлы сборки в папку src.build/cmake --build src.build/ # Собственно строит исполняемый файлsrc.build/hello # => Привет, мир! - вывод из скомпилированной программы
Смотрите также
- Список программного обеспечения для автоматизации сборки § Создание сценария сборки
- настроить скрипт
- GYP (Generate Your Projects) - инструмент для создания проектов, созданный Google
- я делаю
- Мезон
- Premake
- qmake
- Автоинструменты
Рекомендации
- ^ «Теги выпуска CMake на GitLab». Получено 28 ноября 2020.
- ^ «Проект с открытым исходным кодом CMake на OpenHub». OpenHub. Получено 2016-04-09.
- ^ «Лицензии · мастер · CMake / CMake». GitLab. Получено 2020-11-13.
- ^ "FLOSS Weekly 111: CMake". подкаст. Сеть TWiT. Получено 27 февраля 2011.
- ^ "Кабель". Архивировано из оригинал на 2013-06-19. Получено 2010-11-10.
- ^ https://cmake.org/pipermail/cmake/2014-June/057793.html
- ^ https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1#file-effective_modern_cmake-md
- ^ а б https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf, https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
- ^ а б Нойндорф, Александр (21.06.2006). «Почему проект KDE перешел на CMake и как». LWN.net.
- ^ "cmake-toolchains (7) - Документация по CMake 3.19.0-rc2". cmake.org. Получено 2020-10-29.
- ^ "cmake-buildsystem (7) - Документация по CMake 3.19.0-rc3". cmake.org. Получено 2020-11-14.
- ^ "cmake-language (7) - Документация по CMake 3.19.0-rc2". cmake.org. Получено 2020-10-29.
- ^ "add_executable - Документация CMake 3.19.0-rc1". cmake.org. Получено 2020-10-25.
- ^ "add_library - Документация CMake 3.19.0-rc1". cmake.org. Получено 2020-10-25.
- ^ "cmake-language (7) - Документация по CMake 3.19.0-rc1". cmake.org. Получено 2020-10-25.
- ^ "cmake-modules (7) - Документация по CMake 3.14.7". cmake.org. Получено 2020-10-24.
- ^ «ExternalProject - Документация по CMake 3.14.7». cmake.org. Получено 2020-10-24.
- ^ «Упаковка с помощью CPack». Вики Сообщества CMake.
- ^ Linux Общие команды Руководство –