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

Оглавление
- Что такое 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
Установка CMake проста, но пути разные в зависимости от целей: быстрая локальная установка для разработки, подготовка CI-агента или сборка из исходников. Ниже описаны распространённые варианты и шаги.
Требования
Для сборки проектов на C/C++ вам потребуется компилятор. Обычные варианты:
- Clang (рекомендуется для статической и современной линковки)
- GCC (широко используется и прост в установке)
Примеры команд для Debian/Ubuntu-подобных систем:
Clang:
sudo apt update
sudo apt install clang lldb lldGCC (включает 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 для выбора конфигураций, генераторов и сборок.
Пошагово:
- Установите VS Code (через Snap или с официального сайта).
- Откройте Extensions (Ctrl+Shift+X) и установите расширения: C/C++, CMake и CMake Tools.
- Проверьте установку CMake и версию в терминале:
cmake --version- В панели 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 или для получения самой свежей версии.
Пример загрузки и установки сценария с официального сайта (общая последовательность):
- Скачайте архив или shell-скрипт с cmake.org.
- Сделайте скрипт исполняемым и запустите его.
В графическом файловом менеджере можно изменить права или в терминале:
sudo chmod +x file_path
./file_pathСкрипт распакует файлы, и приложение CMake появится в каталоге bin выбранного вами пути.

Совет: Для системного удобства можно добавить путь к каталогу bin в PATH или создать символьную ссылку в /usr/local/bin.
Как настроить CMake
CMake гибок, но из-за этого конфигурация может показаться сложной. Приведу практический рабочий цикл, основные опции и рекомендации.
Базовый рабочий цикл (рекомендованный)
- Создайте папку проекта с CMakeLists.txt в корне.
- Создайте отдельную директорию сборки (out-of-source):
mkdir build && cd build- Запустите конфигурацию, указав генератор и компилятор (пример для Clang и Ninja):
cmake -G Ninja -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_BUILD_TYPE=Release ..- Постройте проект:
cmake --build .- Установите (если предусмотрено):
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 шагов)
- Создайте CMakeLists.txt с минимальным набором (cmake_minimum_required, project, add_executable/add_library).
- Перенесите исходники и зависимости в target-а.
- Настройте out-of-source build и проверьте сборку локально.
- Добавьте поддержку тестов через enable_testing() и add_test().
- Автоматизируйте в 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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента