Ответ
CMake — это кроссплатформенная система автоматизации сборки (build system generator). Она не собирает проект напрямую, а генерирует файлы для нативных систем сборки (Makefile для GNU Make, .sln для MSVC, проекты для Xcode и т.д.) на основе скриптов CMakeLists.txt. Это стандартный инструмент для управления сборкой C++ проектов.
Основные преимущества для C++ разработки:
- Кроссплатформенность: Один
CMakeLists.txtможет генерировать проекты для Windows, Linux, macOS. - Управление зависимостями: Поиск системных библиотек (
find_package) и подключение подпроектов. - Контроль флагов компиляции: Централизованная настройка стандартов языка, оптимизаций, предупреждений.
Пример минимального CMakeLists.txt для C++ проекта:
cmake_minimum_required(VERSION 3.16)
project(MyCppApp VERSION 1.0 LANGUAGES CXX)
# Устанавливаем стандарт C++
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Создаём исполняемый файл из исходных кодов
add_executable(my_app main.cpp src/utils.cpp)
# Подключаем заголовочные директории
target_include_directories(my_app PUBLIC include)
# Связываем с внешней библиотекой (например, Threads)
find_package(Threads REQUIRED)
target_link_libraries(my_app PRIVATE Threads::Threads)
Типичный рабочий процесс:
# 1. Создать отдельную директорию для сборки (out-of-source build)
mkdir build && cd build
# 2. Сгенерировать файлы сборки (например, для Make)
cmake .. -DCMAKE_BUILD_TYPE=Release
# 3. Запустить сборку
cmake --build . -j4
Современный подход (Modern CMake) рекомендует использовать target-ориентированные команды (target_include_directories, target_link_libraries), а не глобальные переменные, что улучшает изоляцию и переносимость целей сборки.