CMake — это открытая система сборки, которая генерирует файлы сборки для любой платформы и компилятора. Вместо того чтобы писать отдельные сценарии сборки для разных сред, вы описываете процесс сборки один раз в файле CMakeLists.txt, а CMake создаёт соответствующие Makefile, Ninja или файлы проектов для IDE. Это делает CMake незаменимым инструментом для кроссплатформенной разработки на C и C++, сборки игровых движков и крупных программных проектов со сложными зависимостями.
💡 Если вы разрабатываете на C/C++, собираете проекты из исходных кодов или работаете с большими системами, где важна единообразная сборка — CMake предоставит надёжный и стандартизированный способ генерации файлов сборки под любую платформу.
В этом руководстве мы рассмотрим два метода установки CMake на Rocky Linux 8, 9 и 10:
- Установка из репозитория AppStream — для стабильной, протестированной версии с автоматическими обновлениями.
- Установка из исходных кодов — для доступа к самой свежей версии со всеми новыми функциями.
Для кого: новички (кто только начинает знакомиться со сборкой программ), разработчики C/C++ (для настройки кросс-платформенных проектов), сисадмины (для сборки утилит из исходников).
1. CMake: DNF (AppStream) или сборка из исходников?
Перед установкой важно понять разницу между двумя методами, чтобы выбрать подходящий именно для ваших задач.
| Метод | Канал | Версия | Обновления | Для кого |
|---|---|---|---|---|
| DNF (AppStream) | Стандартный репозиторий Rocky | Версия по умолчанию для дистрибутива | Автоматические через dnf upgrade | Большинство пользователей, которым нужна стабильность и простота обслуживания |
| Сборка из исходников | GitHub Releases | Последняя стабильная | Требуется ручная перекомпиляция | Разработчикам, которым нужны новейшие функции или специфические флаги сборки |
💡 Вывод для новичка: Для большинства задач подойдёт установка через DNF — это просто, надёжно и не требует ручного обновления. Сборку из исходников используйте, только если ваш проект требует версию новее, чем та, что есть в репозитории Rocky.
Версии CMake в разных релизах Rocky Linux
Версия CMake, доступная в репозитории AppStream, зависит от версии вашей Rocky Linux:
| Версия Rocky Linux | Версия CMake в AppStream |
|---|---|
| Rocky Linux 10 | 3.30.x |
| Rocky Linux 9 | 3.26.x |
| Rocky Linux 8 | 3.26.x |
Если вашему проекту требуется более новая версия — используйте метод сборки из исходников, описанный ниже.
2. Подготовка системы
2.1 Обновление системы
sudo dnf upgrade --refresh -y
Что делает:
sudo— права суперпользователя.dnf upgrade— обновляет все пакеты до последних версий.--refresh— принудительно перекачивает метаданные репозиториев (игнорирует кэш).-y— автоматически отвечает «yes».
Зачем: Это стандартная практика безопасности перед установкой нового ПО. Снижает риск конфликтов зависимостей.
2.2 Установка базовых утилит (для метода из исходников)
Если вы планируете собирать CMake из исходников, заранее установите необходимые инструменты:
sudo dnf install -y gcc gcc-c++ make curl wget tar openssl-devel
Что делает: Устанавливает компиляторы (gcc, gcc-c++), утилиту make для сборки, программы curl и wget для скачивания файлов, tar для распаковки и заголовочные файлы OpenSSL (нужны для поддержки HTTPS при скачивании через CMake).
Зачем: Без этих пакетов сборка из исходников будет невозможна — вы получите ошибки о пропущенных компиляторах или библиотеках.
3. Установка CMake через DNF (AppStream)
Этот метод подходит для большинства пользователей. Вы получаете стабильную версию, которая будет обновляться вместе с системой через dnf upgrade.
3.1 Установка пакета
sudo dnf install -y cmake
Что делает: Устанавливает пакет cmake и все его зависимости из официального репозитория Rocky Linux.
3.2 Проверка версии
cmake --version
Ожидаемый вывод (пример для Rocky 10):
cmake version 3.30.5
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Зачем: Убедиться, что установка прошла успешно и CMake доступен в системе.
✅ Готово. Если версия устраивает — можете пропустить следующий раздел и переходить к использованию.
4. Установка CMake из исходников (последняя версия)
Этот метод сложнее, но даёт доступ к самой свежей версии CMake. Подходит, если ваш проект требует функций, которых нет в версии из AppStream.
4.1 Создаём директорию для сборки
mkdir -p ~/cmake-build && cd ~/cmake-build
Что делает:
mkdir -p— создаёт папкуcmake-buildв домашней директории (если её нет).cd— переходит в эту папку.
Зачем: Чтобы не засорять домашнюю директорию временными файлами сборки. Все исходники и промежуточные файлы будут лежать в одном месте.
4.2 Определяем последнюю версию и скачиваем исходники
bash
VERSION=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | grep -oP '"tag_name": "v\K[^"]+')
echo "Загружается версия CMake: ${VERSION}"
✅ Ожидаемый вывод в терминале (пример — версия может быть другая):
Загружается версия CMake: 4.3.1
Далее обращаемся к github:
wget https://github.com/Kitware/CMake/releases/download/v${VERSION}/cmake-${VERSION}.tar.gz
✅ Ожидаемый вывод в терминале:
--2026-04-08 12:00:00-- https://github.com/Kitware/CMake/releases/download/v4.3.1/cmake-4.3.1.tar.gz Resolving github.com... 140.82.112.3 ... Saving to: ‘cmake-4.3.1.tar.gz’
Разбор команды:
curl -s ...— обращается к API GitHub и получает JSON с информацией о последнем релизе.grep -oP ...— вырезает номер версии из строки"tag_name": "v4.3.1".wget— скачивает архив с исходниками нужной версии.
💡 Что делать, если GitHub API недоступен? Зайдите на страницу релизов CMake, найдите нужную версию (например, 4.2.1) и выполните команду вручную:
wget https://github.com/Kitware/CMake/releases/download/v4.2.1/cmake-4.3.1.tar.gz
4.3 Распаковываем архив
tar -xzf cmake-${VERSION}.tar.gz
cd cmake-${VERSION}
Что делает:
tar -xzf— распаковывает архив (флаг-x— extract,-z— gzip,-f— файл).cd— переходит в распакованную директорию.
4.4 Запускаем скрипт начальной настройки (bootstrap)
./bootstrap
Что делает: Скрипт bootstrap проверяет наличие компилятора и необходимых библиотек, а затем создаёт систему сборки для самого CMake.
Сколько ждать: Обычно 1–3 минуты, в зависимости от производительности сервера.
Ожидаемый вывод в конце:
CMake has bootstrapped. Now run make.
⚠️ Если bootstrap завершился с ошибкой — проверьте, установлены ли компиляторы (gcc-c++) и библиотека OpenSSL (openssl-devel). Вернитесь к шагу 2.2.
4.5 Компиляция (сборка)
make -j$(nproc)
Что делает:
make— запускает процесс компиляции.-j$(nproc)— указывает, сколько ядер процессора использовать для параллельной сборки.nprocвозвращает количество ядер (например, 4 или 8). Это ускоряет сборку в несколько раз.
Сколько ждать: От 5 до 15 минут, в зависимости от мощности сервера.
4.6 Установка в систему
sudo make install
Что делает: Копирует скомпилированные бинарные файлы в системные директории (/usr/local/bin — основной исполняемый файл, /usr/local/share — вспомогательные файлы).
Зачем: Чтобы CMake был доступен из любой точки системы.
4.7 Проверяем версию установленного CMake
cmake --version
Ожидаемый вывод:
cmake version 4.3.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Цифра должна совпадать с той, что скачивали на шаге 4.2.
💡 Почему теперь используется версия из /usr/local/bin, а не из /usr/bin? В стандартном PATH в Rocky Linux директория /usr/local/bin находится перед /usr/bin. Поэтому система находит сначала установленный вручную CMake.
✅ Готово. Вы установили самую свежую версию CMake.
5. Обновление CMake (собранного из исходников)
Установленный через DNF CMake будет обновляться автоматически. А вот собранный из исходников нужно обновлять вручную. Чтобы упростить процесс, создадим скрипт.
5.1 Создаём скрипт обновления
nano ~/update-cmake.sh
Скопируйте и вставьте в редактор следующий код:
#!/bin/bash
# Скрипт для обновления CMake из исходников
set -e # Остановить скрипт при любой ошибке
echo "Проверка последней версии CMake..."
LATEST=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | grep -oP '"tag_name": "v\K[^"]+')
if [ -z "$LATEST" ]; then
echo "Ошибка: Не удалось определить последнюю версию."
exit 1
fi
CURRENT=$(cmake --version 2>/dev/null | head -1 | grep -oP '\d+\.\d+\.\d+' || echo "не установлена")
echo "Текущая версия: ${CURRENT}"
echo "Последняя версия: ${LATEST}"
echo ""
if [ "$CURRENT" = "$LATEST" ]; then
echo "CMake уже последней версии."
exit 0
fi
read -p "Обновить? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Обновление отменено."
exit 0
fi
BUILD_DIR="$HOME/cmake-build"
mkdir -p "${BUILD_DIR}"
cd "${BUILD_DIR}"
echo "Скачивание CMake ${LATEST}..."
wget -q "https://github.com/Kitware/CMake/releases/download/v${LATEST}/cmake-${LATEST}.tar.gz"
echo "Распаковка..."
tar -xzf "cmake-${LATEST}.tar.gz"
cd "cmake-${LATEST}"
echo "Запуск bootstrap (1-3 минуты)..."
./bootstrap
echo "Компиляция (5-15 минут)..."
make -j$(nproc)
echo "Установка (требуется пароль sudo)..."
sudo make install
echo ""
echo "Обновление завершено!"
cmake --version
Что делает скрипт:
#!/bin/bash— указывает, что скрипт выполняется в интерпретаторе Bashset -e— если любая команда завершится ошибкой, скрипт сразу остановитсяLATEST=...— получает номер последней версии с GitHubCURRENT=...— определяет текущую установленную версиюread -p "Обновить? (y/n)"— спрашивает разрешение перед обновлениемwget -q— скачивает архив (флаг-qподавляет лишний вывод)make -j$(nproc)— компилирует с использованием всех ядер процессораsudo make install— устанавливает собранную версию в систему
Зачем нужен этот скрипт: В отличие от установки через DNF (где обновления приходят автоматически), собранный из исходников CMake требует ручного обновления. Скрипт автоматизирует этот процесс: сам проверяет наличие новой версии, скачивает, собирает и устанавливает.
5.2 Делаем скрипт исполняемым и запускаем
chmod +x ~/update-cmake.sh
~/update-cmake.sh
Что делает chmod +x: Добавляет файлу право на выполнение.
Зачем: Теперь для обновления CMake достаточно выполнить ~/update-cmake.sh и при необходимости ввести пароль sudo.
⚠️ Важно: Не автоматизируйте этот скрипт через cron. Компиляция потребляет много ресурсов CPU, а скрипт требует интерактивного ввода пароля sudo.
6. Удаление CMake
6.1 Если CMake был установлен через DNF
sudo dnf remove -y cmake
Что делает: Удаляет пакет и его зависимости, которые не нужны другим программам.
6.2 Если CMake был собран из исходников
Удалите файлы вручную:
sudo rm -rf /usr/local/bin/cmake /usr/local/bin/ctest /usr/local/bin/cpack /usr/local/bin/ccmake
sudo rm -rf /usr/local/share/cmake-*
sudo rm -rf /usr/local/doc/cmake-*
Осторожно: Эти команды удаляют файлы только CMake. Убедитесь, что не ошиблись в путях.
Также удалите директорию со сборкой и скрипт обновления:
rm -rf ~/cmake-build
rm -f ~/update-cmake.sh
6.3 Проверка удаления
cmake --version
Ожидаемый результат:
-bash: cmake: command not found
7. Диагностика проблем
7.1 Ошибка: «bootstrap: Command not found» или «g++: command not found»
Причина: Не установлены компиляторы или вы находитесь не в той директории.
Решение:
sudo dnf install -y gcc gcc-c++
# Убедитесь, что вы внутри распакованной папки cmake-*
pwd # должно быть что-то вроде /home/user/cmake-build/cmake-4.2.1
7.2 После сборки из исходников показывает старую версию
Причина: Система находит CMake из /usr/bin (версия из DNF) раньше, чем из /usr/local/bin.
Решение 1 (удалить версию из DNF):
sudo dnf remove -y cmake
Решение 2 (проверить PATH):
which cmake
# Должно показать /usr/local/bin/cmake
Если показывает /usr/bin/cmake — значит, версия из исходников не установилась или установилась с ошибкой.
7.3 Ошибка при wget: «Cannot write to …»
Причина: Закончилось место на диске или нет прав на запись.
Решение:
df -h # проверить свободное место
# Очистите старые сборки
rm -rf ~/cmake-build
Чек-лист: всё готово к работе
# 1. Проверка версии (должна соответствовать ожидаемой)
cmake --version
# 2. Проверка, откуда взят бинарник (для метода из исходников)
which cmake
# Ожидается: /usr/local/bin/cmake
# 3. Проверка базовой функциональности
cmake --help
# Должна показаться справка с перечнем генераторов
Заключение
Вы установили CMake на Rocky Linux. Теперь ваша система готова к сборке проектов на C/C++ и других языках, использующих эту систему.
Что дальше:
- Для работы с CMake в проектах изучите официальную документацию: cmake.org/documentation
- Пример простого
CMakeLists.txtдля вашего проекта:
cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_executable(myapp main.cpp)
- Сборка проекта через CMake:
mkdir build && cd build
cmake ..
make