Склонируйте и поменяйте "Mylib" на своё название.
Либо сгенерируйте свой проект с помощью скрипта: https://github.com/izvolov/mylib-gen
Сборка данного проекта, как и любого другого проекта на системе сборки CMake, состоит из двух этапов:
cmake -S путь/к/исходникам -B путь/к/сборочной/директории [опции ...]
cmake --build путь/к/сборочной/директории [--target target]
cmake -S ... -B ... -DMYLIB_COVERAGE=ON [прочие опции ...]
Включает цель coverage
, с помощью которой можно запустить замер покрытия кода тестами.
cmake -S ... -B ... -DMYLIB_TESTING=OFF [прочие опции ...]
Предоставляет возможность выключить сборку модульных тестов и цель check
. Как следствие, выключается замер покрытия кода тестами (см. Покрытие).
Также тестирование автоматически отключается в случае, если проект подключается в другой проект качестве подпроекта с помощью команды add_subdirectory
.
cmake -S ... -B ... -DDOXYGEN_OUTPUT_LANGUAGE=English [прочие опции ...]
Переключает язык документации, которую генерирует цель doc
на заданный. Список доступных языков см. на сайте системы Doxygen.
По умолчанию включён русский.
cmake --build путь/к/сборочной/директории
cmake --build путь/к/сборочной/директории --target all
Если цель не указана (что эквивалентно цели all
), собирает всё, что можно, а также вызывает цель check
.
cmake --build путь/к/сборочной/директории --target mylib_library
Компилирует библиотеку mylib_library
. Включено по умолчанию.
cmake --build путь/к/сборочной/директории --target mylib-unit-tests
Компилирует модульные тесты. Включено по умолчанию.
cmake --build путь/к/сборочной/директории --target check
Запускает собранные (собирает, если ещё не) модульные тесты. Включено по умолчанию.
См. также mylib-unit-tests
.
cmake --build путь/к/сборочной/директории --target coverage
Анализирует запущенные (запускает, если ещё не) модульные тесты на предмет покрытия кода тестами при помощи программы gcovr.
Цель доступна только при включённой опции MYLIB_COVERAGE
.
См. также check
.
cmake --build путь/к/сборочной/директории --target doc
Запускает генерацию документации к коду при помощи системы Doxygen.
cmake --build путь/к/сборочной/директории --target wandbox
Для этого используется сервис Wandbox. Не злоупотребляйте этой штукой, сервера не резиновые.
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug -DMYLIB_COVERAGE=ON
cmake --build путь/к/сборочной/директории --target coverage --parallel 16
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DMYLIB_TESTING=OFF -DCMAKE_INSTALL_PREFIX=путь/к/установойной/директории
cmake --build путь/к/сборочной/директории --target install
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_PREFIX_PATH=путь/к/директории/куда/установлены/зависимости
cmake --build путь/к/сборочной/директории --parallel 4
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Release -DDOXYGEN_OUTPUT_LANGUAGE=English
cmake --build путь/к/сборочной/директории --target doc
Один из вариантов использования модуля — установить его в систему.
cmake --build путь/к/сборочной/директории --target install
После этого любой другой проект, вызвав команду find_package
, получает возможность использовать все библиотеки из пространства имён Mylib::
:
find_package(Mylib 1.0 REQUIRED)
add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::library)
Библиотеку Mylib::library
нужно подключать тогда, когда необходимо слинковаться с библиотекой libmylib_library
. Если достаточно заголовков, то тогда стоит использовать библиотеку Mylib::headers
.
Также проект может быть подключён к другому проекту в качестве подмодуля с помощью команды add_subdirectory
.
В этом случае аналогичным образом будут доступны библиотеки Mylib::library
и Mylib::headers
.
-
CMake 3.14
CMake 3.14 требуется потому, что в предыдущих версиях некорректно работает команда
install(TARGETS ... EXPORT ...)
, а именно — не прописываются пути по умолчанию. -
Библиотека тестирования doctest
Тестирование можно отключать (см. Тестирование).
-
Для переключения языка, на котором будет сгенерирована документация, предусмотрена опция
DOXYGEN_OUTPUT_LANGUAGE
. -
Интерпретатор ЯП Python 3
Для автоматической генерации онлайн-песочницы.
С помощью CMake и пары хороших инструментов можно обеспечить статический анализ с минимальными телодвижениями.
В CMake встроена поддержка инструмента для статического анализа Cppcheck.
Для этого нужно воспользоваться опцией CMAKE_CXX_CPPCHECK
:
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CPPCHECK="cppcheck;--enable=all;-Iпуть/к/исходникам/include"
После этого статический анализ будет автоматически запускаться каждый раз во время компиляции и перекомпиляции исходников. Ничего дополнительного делать не нужно.
При помощи чудесного инструмента scan-build
тоже можно запускать статический анализ в два счёта:
scan-build cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug
scan-build cmake --build путь/к/сборочной/директории
Здесь, в отличие от случая с Cppcheck, требуется каждый раз запускать сборку через scan-build
.