CMake — это не система сборки, а генератор файлов сборки. Вместо того чтобы писать Makefile вручную, вы создаёте один файл CMakeLists.txt, а CMake сам генерирует Makefile (или файлы для Ninja, Visual Studio и других систем) под вашу платформу. Это особенно полезно для кросс-платформенных проектов на C/C++. Сложность в том, что в стабильных репозиториях Debian версия CMake может сильно отставать от актуальной, а сборка из исходников требует установки дополнительных инструментов и внимания к переменной PATH.
💡 В этом руководстве мы разберём три способа установки CMake на Debian: через стандартный APT (проще всего, но версия старше), через Snap (свежая версия в изоляции) и сборку из исходников (самая свежая версия с возможностью кастомизации). Вы также узнаете, как проверить установку на тестовом проекте и решить типичные проблемы.
В этой статье вы узнаете:
- Какой способ установки выбрать в зависимости от ваших задач
- Как установить CMake через APT (для большинства пользователей)
- Как установить CMake через Snap (свежая версия без компиляции)
- Как собрать и установить CMake из исходников (последняя версия)
- Как создать скрипт для автоматического обновления source-сборки
- Как проверить работу CMake на тестовом проекте
- Как решить типичные проблемы: OpenSSL, конфликт версий, права доступа
Для кого: разработчики на C/C++, системные администраторы, которые собирают программы из исходников, а также все, кому нужна актуальная версия CMake на Debian 11, 12 или 13.
1. 🔧 Предварительные требования
Перед установкой убедитесь, что:
- У вас установлена Debian 11, 12 или 13
- Подключение к интернету стабильно
- Вы знаете, нужна ли вам самая свежая версия CMake или достаточно версии из репозитория
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.
Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты через APT или Snap.
✅ Если выводит root — всё в порядке, можете продолжать.
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
1.1 Обновление системы
Перед установкой всегда обновляйте список пакетов:
sudo apt update && sudo apt upgrade -y
Что делает:
sudo— права суперпользователяapt update— обновляет список доступных пакетов из репозиториев&&— выполняет следующую команду только если предыдущая успешнаapt upgrade -y— обновляет все установленные пакеты до последних версий
Зачем: Это стандартная практика безопасности перед установкой нового ПО.
2. 📊 Сравнение способов установки CMake
В Debian есть три основных способа установки CMake. Вот их сравнение:
| Метод | Откуда | Версия | Обновления | Плюсы | Минусы |
|---|---|---|---|---|---|
| APT (Debian репозиторий) | Репозитории Debian | Стабильная, но может быть старой | Автоматически через apt upgrade | Простота, безопасность, минимум усилий | Версия может сильно отставать |
| Snap | Snapcraft (Snap Store) | Свежая (последняя стабильная) | Автоматическ и через snap refresh | Свежая версия, не требует компиляции | Требует установки snapd, изоляция |
| Сборка из исходников | GitHub (релизы Kitware) | Самая свежая | Вручную (пересборка) | Максимальна я свежесть, кастомизация | Требует времени на компиляцию, ручное обновление |
💡 Рекомендация: Если вы обычный пользователь или разработчик, которому не нужна самая свежая версия CMake — используйте APT. Если нужна свежая версия, но не хотите компилировать — используйте Snap. Если вам нужна абсолютно последняя версия или специфические флаги сборки — собирайте из исходников.
3. 📦 Способ 1: Установка CMake через APT (рекомендованный для большинства)
Этот способ подходит для большинства пользователей. Вы получаете версию CMake, которая протестирована и одобрена для вашего выпуска Debian. Обновления приходят вместе с системными обновлениями.
3.1 Установка пакета
sudo apt install cmake -y
Что делает: Устанавливает CMake из официальных репозиториев Debian.
3.2 Проверка установки
cmake --version
Что делает: Показывает установленную версию CMake.
✅ Ожидаемый вывод в терминале (пример для Debian 13):
cmake version 3.29.6
(В Debian 12 версия будет около 3.25.x, в Debian 11 — около 3.20.x.)
3.3 Обновление CMake (только для этого пакета)
sudo apt update
sudo apt install --only-upgrade cmake -y
Что делает: Обновляет только CMake, не трогая остальные пакеты.
4. 📦 Способ 2: Установка CMake через Snap (свежая версия без компиляции)
Snap — это система пакетов от Canonical. CMake в Snap поставляется в свежей версии и обновляется автоматически. Пакет устанавливается в изолированном окружении, но с флагом --classic получает доступ ко всей файловой системе (нужно для сборки проектов).
4.1 Установка snapd (если ещё не установлен)
sudo apt install snapd -y
Что делает: Устанавливает демон snapd — основу системы Snap.
4.2 Выход из системы и вход обратно (или перезагрузка)
После установки snapd нужно обновить переменные окружения. Самый простой способ — выйти из системы и зайти снова или перезагрузить компьютер:
sudo reboot
Зачем: Snapd добавляет свои директории в PATH. Без перелогина команда snap может не найтись.
4.3 Обновление самого snapd (рекомендуется)
sudo snap install snapd
Что делает: Устанавливает/обновляет snap-пакет самого snapd.
4.4 Установка CMake через Snap
sudo snap install cmake --classic
Что делает: Устанавливает CMake из Snap Store с классическим режимом доступа (полный доступ к файловой системе).
Зачем нужен --classic: CMake должен читать и записывать файлы в любых директориях вашего проекта. Без этого флага snap-изоляция не позволит ему работать нормально.
4.5 Проверка установки
cmake --version
✅ Ожидаемый вывод в терминале (пример):
cmake version 4.2.1
Версия будет свежее, чем в APT.
4.6 Обновление CMake (Snap)
Snap обновляется автоматически в фоне. Но можно запустить обновление вручную:
sudo snap refresh cmake
5. 🔧 Способ 3: Сборка CMake из исходников (самая свежая версия)
Этот способ подходит, если вам нужна абсолютно последняя версия CMake (например, новая функция, которая ещё не попала в Snap) или если вы хотите собрать CMake с особыми опциями.
⚠️ Важно: Сборка из исходников занимает время (от 5 до 20 минут в зависимости от мощности компьютера) и требует установки инструментов разработки.
5.1 Установка инструментов сборки и зависимостей
sudo apt install build-essential zlib1g-dev libssl-dev wget ca-certificates -y
Что делает:
build-essential— компилятор gcc, g++, make и заголовочные файлыzlib1g-dev— библиотека сжатия zlib (нужна для сборки CMake)libssl-dev— библиотека OpenSSL (нужна для поддержки HTTPS при скачивании зависимостей)wget ca-certificates— инструменты для скачивания файлов и сертификаты безопасности
Зачем: Без этих пакетов сборка CMake из исходников не удастся.
5.2 Определение последней версии (автоматически)
# Если curl не установлен — установим
if ! command -v curl &>/dev/null; then
echo "curl не найден, устанавливаю..."
sudo apt install curl -y
fi
# Узнаём последнюю версию
LATEST_VERSION=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | awk -F'"' '/"tag_name"/ {print $4}' | sed 's/^v//')
echo $LATEST_VERSION
Что делает: Запрашивает информацию о последнем релизе CMake на GitHub и извлекает номер версии.
Что делает по шагам:
curl -s— тихо (без индикатора прогресса) запрашивает JSON с данными о последнем релизе через GitHub APIawk -F'"' '/"tag_name"/ {print $4}'— ищет строку с"tag_name"и извлекает номер версии (например,v4.2.1)sed 's/^v//'— удаляет буквуvв начале, оставляя только цифры
Зачем: Автоматическое определение последней версии избавляет от необходимости вручную искать номер релиза на GitHub.
💡 Альтернатива (ручной способ): Зайдите на страницу релизов CMake и посмотрите последнюю стабильную версию. На момент написания руководства — 4.2.1. В этом случае просто присвойте переменной нужное значение:
LATEST_VERSION=4.2.1
5.3 Скачивание исходников
wget https://github.com/Kitware/CMake/releases/download/v${LATEST_VERSION}/cmake-${LATEST_VERSION}.tar.gz
Что делает: Скачивает архив с исходным кодом CMake указанной версии.
5.4 Распаковка и переход в директорию
tar -xzf cmake-${LATEST_VERSION}.tar.gz
cd cmake-${LATEST_VERSION}
Что делает: Распаковывает архив и переходит в директорию с исходниками.
5.5 Конфигурация (bootstrap)
./bootstrap
Что делает: Запускает скрипт bootstrap, который проверяет систему, настраивает параметры сборки и генерирует Makefile.
Сколько длится: Обычно 1-2 минуты.
Что может пойти не так: Если нет libssl-dev, bootstrap выдаст ошибку про OpenSSL. В этом случае установите недостающие зависимости (см. раздел 8.1).
5.6 Компиляция
make
Что делает: Компилирует CMake из исходников.
Сколько длится: От 5 до 20 минут в зависимости от количества ядер процессора.
💡 Совет: Чтобы ускорить компиляцию на многоядерном процессоре, используйте make -j$(nproc). Флаг -j задаёт количество параллельных задач, а $(nproc) подставляет число ядер.
5.7 Установка
sudo make install
Что делает: Устанавливает собранный CMake в систему. По умолчанию файлы копируются в /usr/local/bin и /usr/local/share.
5.8 Проверка установки
cmake --version
✅ Ожидаемый вывод в терминале:
cmake version 4.2.1
⚠️ Важно: Если после установки cmake --version всё ещё показывает старую версию (из APT), значит ваша система находит бинарный файл в /usr/bin раньше, чем в /usr/local/bin. Решение описано в разделе 7.2.
5.9 (Опционально) Создание скрипта для обновления source-сборки
Если вы планируете обновлять CMake из исходников в будущем, вот скрипт, который автоматически скачивает последнюю версию, собирает и устанавливает её.
Создание директории и скрипта:
sudo mkdir -p /opt/cmake-build
sudo chown -R $USER:$USER /opt/cmake-build
Что делает: Создаёт директорию /opt/cmake-build и делает текущего пользователя её владельцем.
Создание скрипта обновления:
cat <<'EOF' > /opt/cmake-build/update-cmake.sh
#!/usr/bin/env bash
set -euo pipefail
# Проверка наличия необходимых команд
for cmd in wget tar make gcc g++; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "Error: $cmd is required. Install build tools first."
exit 1
fi
done
# Определение последней версии
LATEST_TAG=$(wget -qO- https://api.github.com/repos/Kitware/CMake/releases/latest | grep -m1 -oE '"tag_name": "v[^"]+"' | cut -d '"' -f4)
if [ -z "$LATEST_TAG" ]; then
echo "Error: Unable to determine the latest CMake version."
exit 1
fi
LATEST_VERSION="${LATEST_TAG#v}"
CURRENT_VERSION=$(cmake --version | head -1 | awk '{print $3}')
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo "CMake is already up to date ($CURRENT_VERSION)."
exit 0
fi
echo "Updating CMake from $CURRENT_VERSION to $LATEST_VERSION..."
cd /opt/cmake-build
# Скачивание и распаковка
wget -q https://github.com/Kitware/CMake/releases/download/v${LATEST_VERSION}/cmake-${LATEST_VERSION}.tar.gz
tar -xzf cmake-${LATEST_VERSION}.tar.gz
cd cmake-${LATEST_VERSION}
# Конфигурация, компиляция, установка
./bootstrap
make -j$(nproc)
sudo make install
echo "Updated CMake to ${LATEST_VERSION}."
EOF
Делаем скрипт исполняемым:
chmod +x /opt/cmake-build/update-cmake.sh
Запуск обновления:
/opt/cmake-build/update-cmake.sh
Что делает скрипт: Сравнивает текущую версию CMake с последней на GitHub и, если они отличаются, скачивает, собирает и устанавливает новую версию.
⚠️ Важно: Не автоматизируйте этот скрипт через cron. Сборка из исходников может завершиться ошибкой из-за отсутствия зависимостей или проблем с сетью. Запускайте его вручную и проверяйте вывод.
6. 🧪 Проверка установки: сборка тестового проекта
После установки CMake любым способом стоит убедиться, что он работает вместе с компилятором. Для этого мы соберём маленькую программу на C++.
6.1 Установка компилятора (если ещё не установлен)
Для APT и Snap-установок CMake компилятор нужно установить отдельно:
sudo apt install build-essential -y
Что делает: Устанавливает компилятор g++, make и другие инструменты разработки.
Для source-сборки компилятор уже был установлен в разделе 5.1.
6.2 Создание тестового проекта
Создаём директорию:
mkdir -p ~/cmake-hello && cd ~/cmake-hello
Создаём файл CMakeLists.txt:
cat <<'EOF' > CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(HelloWorld)
add_executable(hello main.cpp)
EOF
Что делает:
cmake_minimum_required(VERSION 3.16)— задаёт минимальную версию CMake (если у вас старше, проект не соберётся)project(HelloWorld)— задаёт имя проектаadd_executable(hello main.cpp)— говорит CMake, что нужно собрать исполняемый файлhelloиз исходникаmain.cpp
Создаём файл main.cpp:
cat <<'EOF' > main.cpp
#include <iostream>
int main()
{
std::cout << "Hello, World from CMake!" << std::endl;
return 0;
}
EOF
6.3 Конфигурация и сборка
cmake .
Что делает: Запускает CMake в текущей директории (.). CMake читает CMakeLists.txt и генерирует Makefile.
✅ Ожидаемый вывод в терминале (сокращённо):
-- Configuring done
-- Generating done
Сборка:
make
Что делает: Запускает make, который компилирует программу согласно сгенерированному Makefile.
✅ Ожидаемый вывод в терминале (сокращённо):
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello
6.4 Запуск тестовой программы
./hello
✅ Ожидаемый вывод в терминале:
Hello, World from CMake!
Если вы видите эту строку — CMake установлен корректно и готов к работе.
7. ⚠️ Решение типичных проблем
7.1 Ошибка: Could not find OpenSSL при bootstrap
Симптом: При запуске ./bootstrap появляется ошибка:
CMake Error: Could not find OpenSSL
CMake Error: CMAKE_USE_OPENSSL is ON but a SSL library is not found!
Причина: Отсутствует пакет libssl-dev, который содержит заголовочные файлы и библиотеки OpenSSL.
Пошаговое решение:
Шаг 1: Установите недостающий пакет:
sudo apt install libssl-dev -y
Что делает: Устанавливает OpenSSL-заголовки и библиотеки.
Шаг 2: Повторите ./bootstrap:
./bootstrap
7.2 После source-сборки показывает старую версию (или cmake: command not found)
Симптом: Вы собрали и установили CMake из исходников (sudo make install), но:
cmake --versionпоказывает старую версию (из APT)- Или вообще пишет
bash: cmake: command not found
Причина: Ваш терминал находит старый бинарный файл в /usr/bin раньше, чем новый в /usr/local/bin. Или директория /usr/local/bin вообще не добавлена в PATH.
Пошаговое решение:
Шаг 1: Проверьте, какой бинарный файл используется сейчас:
command -v cmake
Что делает: Показывает полный путь к команде cmake, которая будет выполнена.
Что вы можете увидеть:
/usr/bin/cmake— терминал находит старую версию (проблема)пустая строка— CMake не найден совсем (другая проблема)/usr/local/bin/cmake— всё правильно, но версия может быть старой (тогда проблема в самой сборке)
Шаг 2: Если CMake не найден (пустая строка) или найден в /usr/bin, нужно добавить /usr/local/bin в PATH и сделать его приоритетным.
Временно (только для этого терминала):
export PATH="/usr/local/bin:$PATH"
Что делает: Устанавливает переменную PATH так, чтобы сначала искать в /usr/local/bin, потом везде.
Проверьте снова:
command -v cmake
✅ Теперь должно быть /usr/local/bin/cmake
Шаг 3: Сделайте изменение постоянным (чтобы работало в новых терминалах).
Способ А (автоматический, проще):
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
Что делает: Добавляет нужную строку в конец файла ~/.bashrc. Файл не открывается, строка просто дописывается.
Способ Б (ручной, если хотите увидеть файл):
Откройте файл ~/.bashrc в редакторе:
nano ~/.bashrc
Перейдите в самый конец (стрелка вниз) и добавьте строку:
export PATH="/usr/local/bin:$PATH"
Сохраните: Ctrl+O, Enter, Ctrl+X.
Шаг 4: Примените изменения в текущем терминале:
source ~/.bashrc
Что делает: Перечитывает файл ~/.bashrc и применяет настройки без перезапуска терминала.
Шаг 5: Проверьте версию:
cmake --version
✅ Теперь должна показываться версия, которую вы собрали (например, 4.2.1).
💡 Если вы ошиблись и хотите вернуть всё как было: Откройте ~/.bashrc (nano ~/.bashrc), удалите строку с export PATH="/usr/local/bin:$PATH", сохраните и откройте новый терминал.
7.3 Ошибка: Permission denied при make install
Симптом: При выполнении make install появляется ошибка:
CMake Error at cmake_install.cmake:41 (file):
file INSTALL cannot copy file "/home/user/cmake-4.2.1/bin/cmake" to "/usr/local/bin/cmake".
Причина: Установка в /usr/local/bin требует прав суперпользователя.
Пошаговое решение:
Шаг 1: Используйте sudo для установки:
sudo make install
Шаг 2 (альтернатива): Если у вас нет прав sudo, установите CMake в домашнюю директорию:
./bootstrap --prefix=$HOME/.local
make
make install
Шаг 3: Добавьте эту директорию в PATH:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Шаг 4: Проверьте установку:
cmake --version
7.4 Ошибка: CMake не может найти компилятор C++
Симптом: При запуске cmake . появляется ошибка:
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
Причина: Не установлен компилятор g++ (или другой C++ компилятор).
Пошаговое решение:
Шаг 1: Установите компилятор и инструменты сборки:
sudo apt install build-essential -y
Шаг 2: Проверьте, что компилятор доступен:
g++ --version
7.5 Версия CMake из Snap не запускается
Симптом: cmake --version не работает, хотя snap install cmake прошёл успешно.
Причина: После установки snapd нужно перелогиниться или перезагрузить систему, чтобы обновить PATH.
Пошаговое решение:
Шаг 1: Перезагрузите компьютер:
sudo reboot
Шаг 2: После перезагрузки проверьте:
cmake --version
8. ❌ Удаление CMake
Удаление APT-версии
sudo apt remove --purge cmake -y
sudo apt autoremove -y
Удаление Snap-версии
sudo snap remove cmake
Удаление source-сборки (из /usr/local)
sudo rm -f /usr/local/bin/cmake /usr/local/bin/ctest /usr/local/bin/cpack
sudo rm -rf /usr/local/share/cmake-*
Проверка, что удаление прошло успешно
command -v cmake
✅ Ожидаемый вывод: Пустая строка (если CMake больше не установлен) или путь к другой версии, если она осталась.
9. 📝 Чек-лист: всё готово к работе
- [ ] Система обновлена (
sudo apt update && sudo apt upgrade -y) - [ ] Выбран и выполнен один из способов установки (APT / Snap / Source)
- [ ]
cmake --versionпоказывает ожидаемую версию - [ ] Установлен компилятор (
g++ --versionработает) - [ ] Тестовый проект собирается (
cmake . && makeв директории~/cmake-hello) - [ ] Тестовая программа запускается (
./helloвыводитHello, World from CMake!)
Заключение
Вы установили CMake на Debian. Если вы выбрали APT — получили стабильную, проверенную версию, которая будет обновляться вместе с системой. Если выбрали Snap — получили свежую версию без необходимости компилировать. Если собрали из исходников — получили абсолютно последнюю версию, которую можно обновлять скриптом из раздела 5.9. Теперь вы можете использовать CMake для сборки C/C++ проектов — как своих, так и тех, которые вы компилируете из исходников.
Что дальше:
- Изучите официальную документацию CMake, особенно раздел про
CMakeLists.txt - Установите дополнительный генератор сборки —
ninja(sudo apt install ninja-build -y) и используйтеcmake -G Ninja - Настройте CMake для работы с внешними библиотеками через
find_package - Для CI/CD познакомьтесь с
ctest(тестирование) иcpack(упаковка)