🛠️ CMake без боли: настрой сборку один раз и забудь

CMake пугает многих, но не тебя. Вот простой и понятный гайд по настройке CMake для C++ без боли и магии. Мини-шаблон, советы, лайфхаки — и всё это в сопровождении Кодика 🚀

Разработка

6 мин

Если ты писал на C++, ты наверняка сталкивался с CMake. И, возможно, у тебя был момент отчаяния, когда всё просто не собирается. CMake — мощный инструмент, но его синтаксис и структура часто вызывают боль. Давай разберёмся, как настроить CMake один раз и правильно, чтобы больше не возвращаться к хаосу 💡

🔰 Что такое CMake?

CMake — это система генерации сборки. Она не компилирует код напрямую, а создаёт файлы для сборки под твою систему: Makefile, Ninja, Xcode или Visual Studio.

  • ✅ Работает кроссплатформенно

  • ✅ Позволяет настраивать зависимости

  • ✅ Упрощает сборку больших проектов

  • ✅ Совместим с IDE и CI/CD

🧱 Базовая структура проекта с CMake

project-root/
├── CMakeLists.txt
├── src/
│   └── main.cpp
├── include/
│   └── mylib.hpp
├── CMakeLists.txt (внутри src/)

📌 Корневой CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)
project(MyProject)

set(CMAKE_CXX_STANDARD 20)

add_subdirectory(src)

📌 src/CMakeLists.txt:

add_executable(my_app main.cpp)
target_include_directories(my_app PRIVATE ../include)

⚙️ Советы по настройке CMake без боли

1. Используй target_* вместо глобальных переменных

❌ Плохо:

include_directories(./include)

✅ Правильно:

target_include_directories(my_app PRIVATE ./include)

2. Добавляй compile_commands.json

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

Помогает автокомплиту и подсветке ошибок в VS Code и clangd.

3. Всегда используй out-of-source build

mkdir build && cd build
cmake ..
cmake --build .

4. Подключай сторонние библиотеки правильно

Пример с FetchContent:

include(FetchContent)
FetchContent_Declare(
  json 
  URL https://github.com/nlohmann/json/releases/latest/download/json.hpp
)
FetchContent_MakeAvailable(json)

target_link_libraries(my_app PRIVATE nlohmann_json::nlohmann_json)

🧪 Чеклист хорошего CMake-проекта

  • ✅ CMakeLists.txt не длиннее 30 строк

  • ✅ Все зависимости через target_*

  • ✅ Поддержка Debug/Release

  • ✅ Out-of-source сборка

  • ✅ Работает в терминале и IDE

📚 Хочешь углубиться в тему?
В приложении Кодик ты найдёшь подробные уроки по CMake и C++, пошаговые упражнения, разбор ошибок и удобную практику прямо в телефоне или браузере.
А если хочешь быть в курсе новостей, новых фич и полезных материалов — подписывайся на наш Telegram-канал. Там уютно, по делу и с любовью к коду ❤️

Комментарии