CMake - CMake

CMake
Cmake.svg
Разработчики)Энди Седильник, Билл Хоффман, Брэд Кинг, Кен Мартин, Александр Нойндорф
изначальный выпуск2000; 20 лет спустя (2000)
Стабильный выпуск
3.19.1[1] / 24 ноября 2020 г.; 4 дня назад (2020-11-24)
Репозиторий Отредактируйте это в Викиданных
Написано вC, C ++[2]
Операционная системаКроссплатформенность
ТипИнструменты разработки программного обеспечения
ЛицензияНовый BSD
Интернет сайтcmake.org Отредактируйте это в Викиданных

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]

Его можно использовать для генерации:

Примеры

Привет, мир

Следующие файлы исходного кода (предполагается, что они помещены в 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 # => Привет, мир! - вывод из скомпилированной программы

Смотрите также

Рекомендации

  1. ^ «Теги выпуска CMake на GitLab». Получено 28 ноября 2020.
  2. ^ «Проект с открытым исходным кодом CMake на OpenHub». OpenHub. Получено 2016-04-09.
  3. ^ «Лицензии · мастер · CMake / CMake». GitLab. Получено 2020-11-13.
  4. ^ "FLOSS Weekly 111: CMake". подкаст. Сеть TWiT. Получено 27 февраля 2011.
  5. ^ "Кабель". Архивировано из оригинал на 2013-06-19. Получено 2010-11-10.
  6. ^ https://cmake.org/pipermail/cmake/2014-June/057793.html
  7. ^ https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1#file-effective_modern_cmake-md
  8. ^ а б 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
  9. ^ а б Нойндорф, Александр (21.06.2006). «Почему проект KDE перешел на CMake и как». LWN.net.
  10. ^ "cmake-toolchains (7) - Документация по CMake 3.19.0-rc2". cmake.org. Получено 2020-10-29.
  11. ^ "cmake-buildsystem (7) - Документация по CMake 3.19.0-rc3". cmake.org. Получено 2020-11-14.
  12. ^ "cmake-language (7) - Документация по CMake 3.19.0-rc2". cmake.org. Получено 2020-10-29.
  13. ^ "add_executable - Документация CMake 3.19.0-rc1". cmake.org. Получено 2020-10-25.
  14. ^ "add_library - Документация CMake 3.19.0-rc1". cmake.org. Получено 2020-10-25.
  15. ^ "cmake-language (7) - Документация по CMake 3.19.0-rc1". cmake.org. Получено 2020-10-25.
  16. ^ "cmake-modules (7) - Документация по CMake 3.14.7". cmake.org. Получено 2020-10-24.
  17. ^ «ExternalProject - Документация по CMake 3.14.7». cmake.org. Получено 2020-10-24.
  18. ^ «Упаковка с помощью CPack». Вики Сообщества CMake.
  19. ^ упаковка (1) – Linux Общие команды Руководство

внешняя ссылка