CMake – кроссплатформенная автоматизированная система сборки проектов. Непосредственно сборкой она не занимается, а только генерирует Makefile, который потом будет выполнен утилитой make.
Использует текстовый файл CMakeLists.txt для описания зависимостей и настроек для сборки проекта.
Минимальный CMakeLists.txt для создания исполняемого файла
# Создает исполняемый файл с именем main из исходника main.cadd_executable(test_project main.c)
"cmake.exe"--build ...\cmake-build-release--target DebuggingExample -j 25[1/2] Building C object CMakeFiles/DebuggingExample.dir/main.c.obj[2/2] Linking C executable DebuggingExample.exeBuild finished
Также можно указать минимальную необходимую версию утилиты:
cmake_minimum_required(VERSION 3.10)
Проекты в CMake задаются конструкцией project. Также можно добавить версию проекта.
project(cmake_test_project)project(cmake_test_project VERSION 1.0)
Версия стандарта указывается через конструкцию set:
# C standartset(CMAKE_C_STANDARD 17)set(CMAKE_C_STANDARD_REQUIRED True)# C++ standartset(CMAKE_CXX_STANDARD 23)set(CMAKE_CXX_STANDARD_REQUIRED True)
Можно создавать текстовые переменные. Затем созданные переменные можно использовать в дальнейших конструкциях
include_directories("headers/""include/") # задание для всех целей проектаtarget_include_directories(myTarget PUBLIC ./include) # для определённой цели
Указание libraries directories:
link_directories(${OpenCL_LIBRARY}) # задание для всех целей проектаtarget_link_directories(myTarget PUBLIC A) # для определённой цели
Вы можете выбирать область видимости настройки: PUBLIC делает настройку видимой для текущей цели и для всех зависящих от неё целей, PRIVATE делает настройку видимой только для текущей цели и INTERFACE делает настройку видимой только для всех зависящих от неё целей.
find_package() - принимает имя библиотеки как аргумент и обращается к CMake, чтобы найти скрипт для настройки переменных данной библиотеки. За поиск библиотек отвечают модули, называющиеся FindNAME.cmake, где NAME – имя библиотеки.