Установка CMake на Debian 13, 12, 11: подробное руководство

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
Простота,
безопасность,
минимум
усилий
Версия может
сильно
отставать
SnapSnapcraft
(Snap Store)
Свежая
(последняя
стабильная)
Автоматически
через
snap refresh
Свежая
версия,
не требует
компиляции
Требует
установки
snapd,
изоляция
Сборка из
исходников
GitHub
(релизы Kitware)
Самая свежаяВручную
(пересборка)
Максимальная
свежесть,
кастомизация
Требует
времени на
компиляцию,
ручное
обновление

Версии CMake по умолчанию в разных выпусках Debian:

Версия DebianВерсия CMake в APT
Debian 13 (Trixie)3.31.x
Debian 12 (Bookworm)3.25.x
Debian 11 (Bullseye)3.18.x

💡 Рекомендация: Если вы обычный пользователь или разработчик, которому не нужна самая свежая версия CMake — используйте APT. Если нужна свежая версия, но не хотите компилировать — используйте Snap. Если вам нужна абсолютно последняя версия или специфические флаги сборки — собирайте из исходников.

3. 📦 Способ 1: Установка CMake через APT (рекомендованный для большинства)

Этот способ подходит для большинства пользователей. Вы получаете версию CMake, которая протестирована и одобрена для вашего выпуска Debian. Обновления приходят вместе с системными обновлениями.

3.1 Проверка доступной версии (перед установкой)

Прежде чем устанавливать, посмотрите, какая версия CMake доступна в вашем репозитории:

apt-cache policy cmake

Что делает: Показывает кандидата на установку — версию, которую вы получите.

Ожидаемый вывод в терминале (Debian 13):

cmake:
  Installed: (none)
  Candidate: 3.31.6-2

Что означают строки:

  • Installed: (none) — пакет ещё не установлен
  • Candidate: 3.31.6-2 — версия, которая будет установлена

Если версия вас устраивает — продолжайте установку. Если нет — выберите другой способ (Snap или сборка из исходников).

3.2 Установка пакета

sudo apt install cmake -y

Что делает: Устанавливает CMake из официальных репозиториев Debian.

3.3 Проверка установки

cmake --version

Что делает: Показывает установленную версию CMake.

Ожидаемый вывод в терминале (Debian 13):

cmake version 3.31.6

(В Debian 12 версия будет около 3.25.x, в Debian 11 — около 3.18.x.)

3.4 Обновление 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 API
  • awk -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. Решение описано в разделе 8.2.

5.9 (Опционально) Создание скрипта для обновления source-сборки

Если вы планируете обновлять CMake из исходников в будущем, вот скрипт, который автоматически скачивает последнюю версию, собирает и устанавливает её.

Создание директории и скрипта:

mkdir -p ~/cmake-build
cd ~/cmake-build

Создание скрипта обновления:

cat <<'EOF' > ~/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 ~/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 ~/cmake-build/update-cmake.sh

Запуск обновления:

~/cmake-build/update-cmake.sh

Что делает скрипт: Сравнивает текущую версию CMake с последней на GitHub и, если они отличаются, скачивает, собирает и устанавливает новую версию.

⚠️ ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ:

Не автоматизируйте этот скрипт через cron. Сборка из исходников может завершиться ошибкой из-за отсутствия зависимостей, проблем с сетью или изменений в коде CMake. Запускайте скрипт вручную и проверяйте вывод перед тем, как удалять старые версии.

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.

Шаг 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 (упаковка)

Связанные статьи: