CMake для проектов на C++ и Qt: структура CMakeLists.txt, подключение библиотек, сборка под разные платформы, типичные ошибки конфигурации. Примеры от минимального проекта до многомодульной сборки с тестами.
RPATH в CMake: как приложение находит динамические библиотеки после установки
Почему запуск из build-каталога отличается от установленной программыВо время сборки исполняемый файл часто находит библиотеки через пути сборочной среды. После установки в другой каталог эти пути могут исчезнуть.…
CMake: организация многомодульного Qt-проекта (target_link_libraries, INTERFACE)
Введение По мере роста Qt-проекта единый монолитный CMakeLists.txt со всеми исходниками становится неудобен: компиляция замедляется, границы между подсистемами размываются, а повторное использование кода в других проектах требует копирования…
Подключение сторонних библиотек в Qt через FetchContent в CMake
Введение Раньше подключение сторонней библиотеки в C++-проект означало либо ручную установку через системный пакетный менеджер, либо копирование исходников в репозиторий (vendoring), либо submodule Git с дополнительной настройкой сборки.…
vcpkg + Qt + CMake: управление зависимостями C++-проекта
Введение vcpkg — пакетный менеджер C/C++ от Microsoft, который заметно упрощает установку и связывание сторонних библиотек с CMake-проектом: вместо ручной компиляции зависимостей из исходников или установки через системные…
Boost.Asio vs Qt Network: когда что выбрать
Введение И Boost.Asio, и Qt Network решают одну и ту же задачу — асинхронную сетевую работу — но делают это разными способами и в разных экосистемах. Если проект…
Сборка Qt-проекта под разные платформы с помощью CMake presets
Введение Конфигурация CMake-проекта под несколько целевых платформ (Windows MSVC, Linux GCC, macOS Clang, кросс-компиляция под embedded) исторически решалась через длинные команды с десятками флагов -D, которые передавались вручную…
CMake: настройка кросс-компиляции Qt-проекта под ARM
Введение Кросс-компиляция — сборка приложения на одной архитектуре (обычно x86_64) для запуска на другой (ARM, часто встречается в embedded Linux устройствах, Raspberry Pi, промышленных контроллерах) — требует toolchain-файла…
Boost.Optional, Boost.Variant и их аналоги в современном C++: нужен ли Boost вообще
Введение Долгое время Boost был фактическим «полигоном» для будущих возможностей стандартной библиотеки C++ — многие классы, такие как optional, variant, any, filesystem, появились в Boost задолго до их…