CMake для проектов на C++ и Qt: структура CMakeLists.txt, подключение библиотек, сборка под разные платформы, типичные ошибки конфигурации. Примеры от минимального проекта до многомодульной сборки с тестами.
FetchContent и ExternalProject: подключение внешних зависимостей без системного менеджера пакетов
Введение Статья 578 разобрала find_package для уже установленных в системе библиотек — FetchContent и ExternalProject решают альтернативную задачу: автоматическое скачивание и сборку зависимости прямо в процессе конфигурации/сборки текущего…
Генераторные выражения (generator expressions): $<...>, условная конфигурация
Введение Статья 576 кратко использовала генераторное выражение $<$<CONFIG:Debug>:...> без подробного объяснения — в этой статье разберём этот специфичный, но мощный синтаксис CMake систематически: генераторные выражения вычисляются не на…
Кросс-компиляция и toolchain-файлы: сборка для другой платформы
Введение Embedded-цикл основного плана (статьи 351-360) разбирал STM32/bare-metal разработку, подразумевая сборку под архитектуру, отличную от той, на которой выполняется сама компиляция — в этой статье разберём механизм CMake,…
Экспорт и установка пакетов: install(), CMake config-файлы для других проектов
Введение Статья 578 показала использование Config-режима find_package для готовых библиотек — в этой статье разберём, как создать такую готовую, «находимую» через find_package библиотеку самостоятельно: команду install() и генерацию…
CTest и CPack: тестирование и упаковка через CMake-инфраструктуру
Введение Основной цикл статей про тестирование и DevOps-цикл (статьи 449, 451) разбирали тестирование и упаковку как отдельные задачи — CMake предоставляет встроенную инфраструктуру для обеих этих задач, интегрированную…
Итоговый мини-проект: многомодульный Qt+OpenCV проект с современным CMake от нуля до установки
Введение В заключительной статье цикла CMake (и текущего общего объёма всего плана статей) собираем итоговый проект, объединяющий все темы цикла — многомодульная структура (с несколькими внутренними библиотеками), интеграция…
Code coverage для Qt-проекта: gcov, lcov и интерпретация отчётов
Введение Покрытие кода тестами (code coverage) показывает, какая доля строк/веток кода была выполнена хотя бы раз во время прогона тестового набора. Это не метрика качества тестов само по…
Интеграция Boost в Qt-проект с использованием CMake
Архитектурная Ключевой принцип:никаких глобальных include_directories, только target-based linking. Структура проекта Пример использования Boost внутри Qt Будем использовать: FileService.h FileService.cpp MainWindow.h MainWindow.cpp main.cpp CMakeLists.txt (Qt6 + Boost) Что происходит…