Гид по технологиям

CMake: установка, настройка и использование

• 7 min read • Разработка • Обновлено 30 Nov 2025
CMake — установка и настройка
CMake — установка и настройка

Cmake Featured Image

Оглавление

  • Что такое CMake?
  • Как установить CMake
    • Требования
    • Интеграция с VS Code
    • Установка как отдельного приложения
  • Как настроить CMake
    • Базовый рабочий цикл
    • Полезные опции командной строки
    • Советы по отладке сборки
  • Когда CMake не подходит
  • Альтернативы
  • Контрольные списки по ролям
  • Краткий глоссарий
  • Часто задаваемые вопросы
  • Итог

Что такое CMake?

CMake — это открытый кроссплатформенный инструмент для генерации файлов сборки (Makefiles, Visual Studio projects, Ninja и др.) на основе сценариев CMakeLists.txt. Он не компилятор и не система сборки сам по себе, а «генератор»: на входе — платформа и конфигурация, на выходе — файлы сборки, которые затем запускает выбранный билд-система.

Определения в одну строку:

  • CMakeLists.txt — основной сценарий, где описываются исходники, цели и зависимости.
  • Генератор — механизм, который CMake использует для создания конкретных файлов сборки (например, Unix Makefiles, Ninja, Visual Studio).
  • Out-of-source build — практика создания каталога сборки вне директории с исходниками.

Cmake Snap Screenshot

Как установить CMake

Установка CMake проста, но пути разные в зависимости от целей: быстрая локальная установка для разработки, подготовка CI-агента или сборка из исходников. Ниже описаны распространённые варианты и шаги.

Требования

Для сборки проектов на C/C++ вам потребуется компилятор. Обычные варианты:

  • Clang (рекомендуется для статической и современной линковки)
  • GCC (широко используется и прост в установке)

Примеры команд для Debian/Ubuntu-подобных систем:

Clang:

sudo apt update
sudo apt install clang lldb lld

GCC (включает make, gcc, g++ и сопутствующие утилиты):

sudo apt update
sudo apt install build-essential

Примечание: lld — линковщик от LLVM, lldb — отладчик.

1. Интеграция с VS Code

VS Code (Visual Studio Code) часто используется как основной редактор. Интеграция CMake с VS Code обеспечивает удобный GUI для выбора конфигураций, генераторов и сборок.

Пошагово:

  1. Установите VS Code (через Snap или с официального сайта).
  2. Откройте Extensions (Ctrl+Shift+X) и установите расширения: C/C++, CMake и CMake Tools.
  3. Проверьте установку CMake и версию в терминале:
cmake --version
  1. В панели CMake Tools выберите Kit (компилятор), конфигурацию (Debug/Release) и генератор (например, Ninja или Unix Makefiles).

Важно: CMake Tools автоматически создаёт out-of-source build директорию по умолчанию и упрощает вызовы –build и –install через GUI.

2. Установка как отдельного приложения

Если вы предпочитаете другой редактор или работаете вне IDE, CMake можно установить отдельно. Доступные варианты:

  • Пакет из дистрибутива (apt, dnf, brew). Минус — версия может быть устаревшей.
  • Snap-пакет: быстро и удобно для Ubuntu и совместимых дистрибутивов.
  • Официальный дистрибутив с сайта CMake — содержит инсталлятор и архивы.
  • Сборка из исходников — для разработки самого CMake или для получения самой свежей версии.

Пример загрузки и установки сценария с официального сайта (общая последовательность):

  1. Скачайте архив или shell-скрипт с cmake.org.
  2. Сделайте скрипт исполняемым и запустите его.

В графическом файловом менеджере можно изменить права или в терминале:

sudo chmod +x file_path
./file_path

Скрипт распакует файлы, и приложение CMake появится в каталоге bin выбранного вами пути.

Cmake Filemanager Screenshot

Совет: Для системного удобства можно добавить путь к каталогу bin в PATH или создать символьную ссылку в /usr/local/bin.

Как настроить CMake

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

Базовый рабочий цикл (рекомендованный)

  1. Создайте папку проекта с CMakeLists.txt в корне.
  2. Создайте отдельную директорию сборки (out-of-source):
mkdir build && cd build
  1. Запустите конфигурацию, указав генератор и компилятор (пример для Clang и Ninja):
cmake -G Ninja -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_BUILD_TYPE=Release ..
  1. Постройте проект:
cmake --build .
  1. Установите (если предусмотрено):
cmake --install . --prefix /usr/local

Если вы используете VS Code, многие шаги автоматизируются через CMake Tools.

Полезные опции командной строки

  • DCMAKE_BUILD_TYPE — Debug/Release/RelWithDebInfo и т.д.
  • DCMAKE_CXX_COMPILER — указывает путь к компилятору C++.
  • -G “Ninja” или -G “Unix Makefiles” — выбор генератора.
  • –build . –target — сборка конкретной цели.
  • –install — установка собранного артефакта.

Пример с опциями линковщика (если нужна явная подстановка линковщика):

cmake -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" ..

Важно: заменяйте lld на подходящий линковщик для вашей системы или оставляйте пустым, если не требуется.

Советы по отладке сборки

  • Всегда используйте out-of-source builds — легче чистить и переключать конфигурации.
  • Для подробного логирования используйте:
cmake -LAH ..
cmake --build . -- VERBOSE=1
  • Проверяйте переменные CMake через ccmake (интерактивный) или через GUI CMake (cmake-gui).
  • Если сборка падает на этапе линковки, проверьте совместимость компилятора и линковщика и порядок библиотек.

Когда CMake не подходит

  • Очень простые одностраничные проекты: иногда достаточно простого Makefile без генератора.
  • Проекты, строго ориентированные на конкретную IDE с нестандартной интеграцией могут требовать собственных скриптов.
  • JIT-языки (например, C# в режиме .NET JIT) обычно не используют CMake для финальной упаковки — для них применяются другие средства (dotnet CLI, MSBuild).

Альтернативные подходы

  • Meson + Ninja — современная альтернатива с фокусом на скорость и простоту: хороший выбор для новых C/C++ проектов.
  • Bazel — масштабируемая система сборки для больших монорепозиториев.
  • GNU Make / custom Makefiles — минималистичный подход, подходит для простых проектов.

Контрольные списки по ролям

Разработчик:

  • Написать CMakeLists.txt в корне проекта
  • Настроить out-of-source build
  • Определить CI-цели и конфигурации

Инженер CI/CD:

  • Выбрать генератор (Ninja для быстрых билдов)
  • Шаблоны для кэша зависимостей
  • Автоматизировать установку CMake в образе сборки

Сборщик/пакетировщик:

  • Проверить установки (cmake –install) для всех целевых платформ
  • Подготовить packaging scripts (deb, rpm, Windows installer)

Совместимость и миграция

  • Windows: рекомендуется использовать Visual Studio Generators или Ninja. На Windows пути к компиляторам и библиотекам отличаются — проверяйте CMake Presets или toolchain-файлы.
  • Linux: доступно множество пакетов; для стабильности на CI устанавливайте конкретную версию CMake (snap или официальный дистрибутив).
  • macOS: используйте Homebrew для установки CMake, обращайте внимание на выбор сенситивных к версии библиотек (например, OpenSSL).

Миграция с старых версий CMake: проверьте устаревшие команды и переменные; используйте POLICY и cmake_minimum_required для указания минимально поддерживаемой версии.

Краткий глоссарий (1 строка)

  • Generator — целевой формат файлов сборки, который создаёт CMake (например, Ninja, Unix Makefiles, Visual Studio).
  • Target — логическая единица сборки (экзecutable/library) в CMake.
  • Preset — набор предопределённых настроек для конфигурации и сборки в CMake.
  • Out-of-source build — создание сборки вне каталога исходников.

Часто задаваемые вопросы

Как внести вклад в open-source проект на C++?

GitHub — хорошее место для поиска проектов: используйте теги (topics) и фильтры по сложности. Для начинающих — ищите метки good-first-issue и readme с инструкциями по сборке (обычно в разделе BUILDING.md или CONTRIBUTING.md).

Можно ли использовать CMake для компиляции C#?

Нет. C# обычно компилируется через компиляторы .NET (Roslyn, dotnet CLI) и использует JIT/IL-процесс, поэтому CMake не является стандартным инструментом для C#.

Активно ли поддерживается CMake?

Да. За CMake отвечает компания Kitware, и проект имеет активное сообщество на GitHub. Выпускаются обновления, багфиксы и улучшения.

Какие ошибки встречаются чаще всего?

  • Неправильный путь к компилятору (CMAKE_CXX_COMPILER).
  • Использование in-source builds — усложняет очистку и параллельные конфигурации.
  • Несовместимые версии линковщика и компилятора.

Когда это не сработает — примеры

  • Вы используете бинарный формат или специфичный конвейер сборки, завязанный на IDE, и не хотите менять workflow.
  • Проект требует моментальной JIT-компиляции и управления CLR/VM-платформой (.NET). В таких сценариях применяют специализированные инструменты.

Мини-методология: как быстро привести проект под CMake (5 шагов)

  1. Создайте CMakeLists.txt с минимальным набором (cmake_minimum_required, project, add_executable/add_library).
  2. Перенесите исходники и зависимости в target-а.
  3. Настройте out-of-source build и проверьте сборку локально.
  4. Добавьте поддержку тестов через enable_testing() и add_test().
  5. Автоматизируйте в CI: установка CMake → конфигурация → сборка → тесты → пакеты.

Риски и рекомендации по смягчению

Риск: несовместимость версий компилятора/линковщика.

  • Смягчение: фиксируйте версии в CI и используйте toolchain файлы.

Риск: устаревшая версия CMake в системном репозитории.

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

Итог

CMake — гибкий и мощный инструмент для управления сборкой C/C++ проектов на разных платформах. Для большинства проектов рекомендуется: использовать out-of-source builds, подключать CMake Tools в VS Code для удобства, фиксировать версии в CI и предпочитать Ninja для быстрого многопоточного билда. Если нужен простой однофайловый проект — можно обойтись без CMake, но для масштабируемых и кроссплатформенных проектов CMake остаётся одним из лучших вариантов.

Image credit: Needpix. All screenshots by Nathan Meyer.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро