Установка 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 — используйте 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 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. Решение описано в разделе 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 (упаковка)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *