0Pricing
C++ Academy · Урок

Структура проекта CMake и CMakeLists.txt

Организуйте дерево исходных файлов и пишите базовые файлы CMakeLists.txt.

«Структура проекта CMake и CMakeLists.txt» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Зачем нужен CMake?

CMake — фактический стандарт генераторов систем сборки для C++. Он создаёт файлы проектов для Make, Ninja, Visual Studio и Xcode на основе единого описания.

Минимальный CMakeLists.txt

Минимальный полезный CMakeLists.txt для одного исполняемого файла.

cmake_minimum_required(VERSION 3.20)
project(MyApp LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(myapp main.cpp)

Сборка вне исходного дерева

Всегда выполняйте сборку в отдельном каталоге — это сохраняет дерево исходного кода чистым.

# from project root
cmake -B build
cmake --build build

Стандартная структура проекта

Чистая структура:

  • CMakeLists.txt
  • src/ — файлы исходного кода
  • include/ — общедоступные заголовочные файлы
  • tests/ — тесты
  • third_party/ — встроенные зависимости

Добавление подкаталогов

Рекурсивно переходите в подкаталоги, содержащие собственные CMakeLists.txt.

# top-level
add_subdirectory(src)
add_subdirectory(tests)

Переменные и свойства

Задавайте переменные с помощью set. Читайте их с помощью ${var}. Распространённые переменные: CMAKE_BUILD_TYPE, CMAKE_CXX_FLAGS.

set(CMAKE_BUILD_TYPE Release)
set(SOURCES src/a.cpp src/b.cpp)

Динамический поиск файлов

Используйте file(GLOB ...) для быстрых прототипов. В промышленном коде перечисляйте исходные файлы явно, чтобы CMake повторно запускался при добавлении файлов.

# Discouraged for production
file(GLOB SOURCES "src/*.cpp")

# Preferred
add_executable(myapp src/main.cpp src/util.cpp)

Конфигурации сборки

Распространённые конфигурации: Debug, Release, RelWithDebInfo, MinSizeRel. Задайте конфигурацию с помощью -DCMAKE_BUILD_TYPE=Release.

cmake -B build -DCMAKE_BUILD_TYPE=Release

Предупреждения компилятора

Включайте предупреждения как свойства цели — это обеспечивает переносимость между компиляторами.

target_compile_options(myapp PRIVATE
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra>
    $<$<CXX_COMPILER_ID:MSVC>:/W4>
)

Современный стиль CMake

Предпочитайте команды на основе целей (target_*) глобальным командам. Они корректно ограничивают область действия свойств конкретными целями.

CMakePresets.json (CMake 3.19+)

Определяйте повторно используемые конфигурации в CMakePresets.json — они будут общими для участников команды.

Установка проекта

Используйте команды install, чтобы копировать исполняемые файлы, библиотеки и заголовочные файлы в пути установки.

install(TARGETS myapp DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)

Быстрая проверка

Какой шаблон каталогов рекомендуется использовать при запуске CMake?

Итоги

CMake — стандартный генератор системы сборки C++. Напишите CMakeLists.txt, выполняйте сборку вне исходного дерева и используйте команды на основе целей. Применяйте наборы предустановок для общих конфигураций и свойства для флагов компилятора.

Часто задаваемые вопросы

Урок «Структура проекта CMake и CMakeLists.txt» бесплатный?

Да — полный текст урока «Структура проекта CMake и CMakeLists.txt» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Структура проекта CMake и CMakeLists.txt»?

Организуйте дерево исходных файлов и пишите базовые файлы CMakeLists.txt. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Структура проекта CMake и CMakeLists.txt»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Структура проекта CMake и CMakeLists.txt
  2. Цели, связывание и видимость: PUBLIC, PRIVATE
  3. Использование vcpkg и Conan для зависимостей
  4. Генерация файлов IDE и кроссплатформенная сборка
← Назад к C++ Academy