Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Компиляция, линковка и основы CMake

Страница 40 из 43 · 2026-10-25 · 1 мин чтения

Компиляция, линковка и основы CMake

Этапы сборки

Упрощённо процесс состоит из предварительной обработки директив, компиляции каждой единицы трансляции, сборки объектных файлов и линковки в исполняемый файл или библиотеку.

  • Ошибка компиляции — проблема синтаксиса, типов или правил языка.
  • Ошибка линковки — не найдено определение или возник конфликт символов.
  • Ошибка времени выполнения — программа собрана, но работает неправильно или завершается аварийно.

Пример CMakeLists.txt

cmake_minimum_required(VERSION 3.20)project(MyApp LANGUAGES CXX)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF)add_executable(MyApp    src/main.cpp    src/Math.cpp)target_include_directories(MyApp PRIVATE include)

add_executable перечисляет исходники исполняемой цели. target_include_directories задаёт пути поиска заголовков для этой цели.

Подключение библиотек

Для собственного модуля можно создать библиотечную цель через add_library, а затем связать её с приложением:

add_library(mathlib src/Math.cpp)target_include_directories(mathlib PUBLIC include)target_link_libraries(MyApp PRIVATE mathlib)

PUBLIC означает, что зависимость нужна самой цели и передаётся её потребителям; PRIVATE — только самой цели; INTERFACE — только потребителям.

Сборка

cmake -S . -B buildcmake --build build

Эти команды конфигурируют проект в папке build и запускают сборку выбранным генератором.

Отладочная и релизная сборка

Отладочная сборка обычно включает символы отладки и меньше оптимизирует код; релизная чаще использует оптимизации. В многоконфигурационных генераторах конфигурацию выбирают при сборке, например --config Release.

Итог

Понимай разницу между компиляцией и линковкой, а настройки сборки описывай в CMake. Настройки лучше привязывать к конкретным целям, а не разбрасывать глобальные флаги по проекту.