cmake-library-template
Описание
Шаблон создания библиотеки CMake
Языки
- CMake91,3%
- C++8,7%
Шаблон библиотеки на CMake
Лицензия: MIT — см. файл в корне репозитория.
Шаблон минимальной C++ библиотеки с готовыми CMake-модулями для:
- генерации export-header,
- установки и экспорта целей (static/shared),
- создания CMake package-config (
),cmake/<project>*.cmake - заготовки для тестов, примеров и документации.
Файл задаёт имя проекта через переменную (по умолчанию ) — переименуйте проект перед использованием шаблона.
Содержание
- Особенности
- Структура репозитория
- Быстрый старт
- Переименование проекта
- Сборка и опции
- Тесты
- Установка и использование в других проектах
- Пример (потребитель)
- Добавление зависимостей
- Код-стиль и статический анализ
- Лицензия
- Вклад и поддержка
Особенности
- Требуется
>= 4.0.2 (см.CMakeвcmake_minimum_required).CMakeLists.txt - Генерация export-header (
).cmake/ConfigureExports.cmake - Установка и экспорт CMake-пакета (
и сопутствующиеcmake/<project>...-config.cmake).*-targets.cmake - Поддержка сборки static/shared через опцию
.<PROJECT_UPPER>_SHARED_LIBS - Пресеты сборки (см.
) для удобной конфигурации.CMakeUserPresets.json - Заготовки для
,examples,tests.docs
Структура репозитория
— основной файл сборки.CMakeLists.txt— макросы и шаблоны (cmake/,LibUtils.cmake,ConfigureExports.cmake).library-config.cmake.in— публичные заголовки (примерinclude/).include/library/add.hpp— исходные файлы (примерsrc/).src/add.cpp,tests/,examples/— заготовки для тестов, примеров и документации.docs/,.clang-format— правила форматирования и статической проверки..clang-tidy
Быстрый старт
- Переименуйте проект (см. раздел ниже).
- Сконфигурируйте и соберите (пример с использованием CMake presets):
Альтернатива — классический поток:
Переименование проекта
Чтобы превратить шаблон в свою библиотеку, выполните минимум шагов:
- В
изменитеCMakeLists.txtна имя вашего проекта (напримерset(LIBRARY_PROJECT_NAME "Library" ...)).MyLib - Переименуйте директорию публичных заголовков
→include/library.include/<project_lower> - Переименуйте
вcmake/library-config.cmake.inи замените внутри все вхожденияcmake/<project_lower>.cmake.inна вашеlibrary.project_lower - Замените namespace и имена заголовков в исходниках (например
→namespace Library).namespace MyLib
Рекомендация:
Замечание: экспортируемая цель имеет вид
(например<project_lower>::<project_lower>) — используйте это имя вlibrary::libraryв потребляющих проектах.target_link_libraries
Сборка и опции
Опции задаются через переменные вида , , и т.д. (например для проекта ). Их можно задавать при конфигурации:
Тесты
После включения тестов () запускайте:
(Добавьте тесты в и зарегистрируйте их в .)
Установка и использование в других проектах
Установите пакет (например локально):
После установки появятся и . В потребляющем проекте используйте:
(Имена в — с учётом регистра проекта; импортируемая цель — в нижнем регистре и с namespace.)
Пример (потребитель)
:
для потребитела:
Добавление зависимостей
В подключайте зависимости через и . Пример:
В есть утилита для копирования DLL/PDB на Windows.
Код-стиль и статический анализ
В репозитории уже есть и . Рекомендую:
- применять
для единообразия форматирования;clang-format - запускать
и/или интегрировать статический анализ в CI;clang-tidy - добавлять unit-тесты и интегрировать их в CI.
Лицензия
Проект распространяется под лицензией MIT. Полный текст лицензии находится в файле в корне репозитория.
Copyright (c) 2025 M. Babenko babenoff.code@outlook.com