CMake
CMake – кроссплатформенная автоматизированная система сборки проектов. Непосредственно сборкой она не занимается, а только генерирует Makefile, который потом будет выполнен утилитой make.
Использует текстовый файл CMakeLists.txt для описания зависимостей и настроек для сборки проекта.
Минимальный CMakeLists.txt для создания исполняемого файла

Также можно указать минимальную необходимую версию утилиты:
Проекты в CMake задаются конструкцией project. Также можно добавить версию проекта.
Версия стандарта указывается через конструкцию set:
Можно создавать текстовые переменные. Затем созданные переменные можно использовать в дальнейших конструкциях
Preprocessor definitions
Добавление флагов компиляции:
Целью сборки может быть не только исполняемый файл, но и библиотека:
Указание include directories:
Указание libraries directories:
Вы можете выбирать область видимости настройки: PUBLIC делает настройку видимой для текущей цели и для всех зависящих от неё целей, PRIVATE делает настройку видимой только для текущей цели и INTERFACE делает настройку видимой только для всех зависящих от неё целей.
Пример с подключением заголовочных и библиотеки
CMake по умолчанию создаёт таргеты в поддиректориях (build/Debug, build/Release и пр.). Для удобства можно задать post-build событие для вызова команды копирования exe-файла в удобное место. Например, скопировать к исходникам можно следующим способом:
find_package() - принимает имя библиотеки как аргумент и обращается к CMake, чтобы найти скрипт для настройки переменных данной библиотеки. За поиск библиотек отвечают модули, называющиеся FindNAME.cmake, где NAME – имя библиотеки.
При успешном нахождении компонента будут добавлены переменные, хранящие пути поиска заголовков, имена библиотек для линкера и пр. В примере ниже при нахождении OpenMP добавляются переменные ${OpenMP_C_FLAGS} и ${OpenMP_CXX_FLAGS}.
Пример с Boost (весь, без указания конкретных компонентов):
Конфигурация и сборка
После настройки CMakeLists.txt настроить конфигурацию и затем уже запустить процесс сборки.
Конфигурация настраивается следующим образом: указываются пути до исходников и до результатов сборки (промежуточных файлов и результата сборки). Дополнительно можно указать переменные для CMake (generator, build_type и пр.).
Single-config системы сборки. Ниже приведён пример конфигурации сборки в режимах Debug и Release.
Multi-configuration generators. Конфигурация указывается при сборке.
Last updated