Структура проекта 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.txtsrc/— файлы исходного кода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 — локальная установка не требуется.
Все уроки этого курса
- Структура проекта CMake и CMakeLists.txt
- Цели, связывание и видимость: PUBLIC, PRIVATE
- Использование vcpkg и Conan для зависимостей
- Генерация файлов IDE и кроссплатформенная сборка