Введение.
Многие, кто начинал создавать собственные программы, пользовался какой-либо системой сборки. В общем, система сборки – это набор инструментов, облегчающий работу с компилятором. Это включает в себя компиляцию, линковку, установку, а также сбор исходных файлов для передачи их компилятору и слежение за зависимостями. Также современные системы сборки облегчают работу с библиотеками, позволяют создавать переносимые проекты и выполняют ещё массу других вкусностей. Эта статья посвящена популярной системе сборки CMake и расскажет, как правильно её установить и настроить, а также будет рассмотрен простой пример её использования. Она рассчитана на тех, что хоть немного знаком с понятиями make, Makefile, компиляция, линковка.
Установка в Linux.
Для популярных дистрибутивов Linux типа Debian, Gentoo, Fedora и т.д. CMake давно лежит в официальных репозиториях. Нам нужно всего лишь установить пакет cmake с помощью менеджера пакетов. Как правило, он устанавливается в системные директории, и необходимости править переменные окружения нету. Можете проверить её работоспособность, выполнив
|
|
Если же в репозитории нет такого пакета, то можно его собрать вручную. Скачиваем Unix/Linux Source, например, cmake-3.5.0-rc3.tar.gz, распаковываем и собираем:
|
|
Если нет необходимости устанавливать в системную /usr директорию, можно в аргументе —prefix прописать нужный корень установки. По умолчанию, без явного указания —prefix, установка будет произведена в /usr/local. -j<cpu_count> используется для ускорения сборки, например, на 4-х ядерном процессоре можно указать -j4, и сборка будет вестись параллельно в 4 потока.
Установка в Windows.
Для Windows на сайте CMake лежит установочный файл msi. Рекомендую при установке отметить галочку добавления пути в переменные окружения PATH для всех пользователей. Тогда, после перелогинивания, CMake будет доступен из любого места. Проверить можно, открыв cmd и выполнив тот же
|
|
Принцип работы.
Основная цель работы CMake – создание Makefile или проекта для конкретной среды программирования по файлу проекта CMakeLists.txt. За тип создаваемых файлов отвечает аргумент -G. Можно посмотреть поддерживаемые генераторы, выполнив
|
|
Т.е. любой проект с использованием этой системы сборки начинается с создания CMakeLists.txt, в котором описывается проект.
CMakeLists.txt
Основную документацию можно посмотреть на сайте CMake, а здесь я расскажу коротко об основных правилах написания этого файла. В этом файле описываются исходные файлы, подключаемые библиотеки, параметры компиляции, подпроекты и правила установки. В одном файле разрешается создавать несколько исполняемых файлов или библиотек и подключать несколько подпроектов. Под подпроектом я подразумеваю просто другую папку с CMakeLists.txt. В этом и состоит основная прелесть CMake – он не накладывает никаких ограничений на состав и сложность проекта. Один файл может описывать как самостоятельное приложение, так и быть корневым файлом сложного программного комплекса. Или, например, в одном файле можно описать сборку библиотеки и исполняемого файла, использующего эту библиотеку, а также тут же подключить ещё парочку подпроектов.
Итак, пример простейшего CMakeLists.txt:
|
|
Рассмотрим подробнее:
|
|
задать имя проекта. Его можно потом использовать, как ${PROJECT_NAME}.
|
|
задать путь для установки собранных файлов. Здесь установка будет производиться в папку, содержащую папку с исходниками.
|
|
добавить пути с хидерами, -I для gcc. Здесь добавляются папка сборки и папка с исходниками.
|
|
собрать в один список все файлы по регулярному выражению. Здесь в переменную CPPS добавляются все файлы по шаблону *.cpp, т.е. все исходные файлы. *.h файлы добавлять не надо, т.к. из них не создается объектных файлов.
|
|
добавить директивы компилятора. Здесь мы включаем оптимизацию O2 и разрешаем все предупреждающие сообщения.
|
|
собрать исполняемый файл. Здесь собирается исполняемый файл hello_cmake из исходников CPPS.
|
|
слинковать файл с библиотеками. Здесь библиотек нет, но если они есть, то они пишутся через пробел после имени файла.
|
|
установить собранный файл. Здесь наш исполняемый файл устанавливается в папку bin папки установки. Она ранее была задана как ${CMAKE_CURRENT_SOURCE_DIR}/../, т.е. рядом с папкой исходников появится папка bin, куда будет установлен собранный файл.
Сборка.
Чтобы сгенерировать Makefile или файл проекта среды, нужно выполнить cmake с указанием директории, где лежит CMakeLists.txt, или просто cmake, если CMakeLists.txt лежит тут же. Хотя признаком хорошего тона считается разделение директорий с исходниками и сборочной. Например, в папке src лежат исходники и CMakeLists.txt, и рядом с src есть папка build. В этом случае для сборки проекта следует перейти в build и выполнить там cmake ../src. Тогда папка с исходниками останется нетронутой, а все служебные файлы cmake и объектные файлы будут создаваться в build.
Смотрите также
- Решаем проблему роста Windows. Что делать с разросшимся WINSXS.
- Как добавить постоянные статические маршруты (persistent static routes) в Mac OS X.
- Знакомство с CMake. Часть 3. CMakeCache, модули CMake, зависимости сборки.
- maybe? Интересная песочница для отладки операций с файлами в скриптах Linux.
- Знакомство с CMake. Часть 2. Переменные, условия, сообщения, опции.