Журнал LinuxFormat - перейти на главную

LXF109:CMake

Материал из Linuxformat
Версия от 08:46, 4 сентября 2009; Crazy Rebel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Новая серия! Кросс-платформенная система сборки для ваших приложений

Собираясь в путь

ЧАСТЬ 1 Система сборки – неизменный спутник любого разработчика. К счастью, сегодня уже не обязательно вникать во все тонкости M4Андрей Боровский представляет CMake!

Вот вам мой вариант теста для настоящего программиста: что неприятнее всего не найти? Кредитку, которой только что расплачивался в ресторане, телефон прекрасной девушки, с которой вчера познакомился в метро, или файл сборки проекта для той системы, в которой работаешь? Разумеется, ни одна из этих проблем не стоит того, чтобы делать из нее трагедию. Даже если кто-то сумеет воспользоваться вашей карточкой, деньги, скорее всего, удастся вернуть, потеря случайного телефонного номера тоже не повод для грусти – кто знает, может оно и к лучшему, а отсутствующий в исходниках файл можно восстановить, при условии, что вы понимаете структуру проекта и у вас под рукой есть подходящие утилиты.

Традиционно программисты, работающие в Linux (да и других Unix-системах) используют для сборки программ инструментарий GNU build system или Autotools (состоящий из утилит autoconf, automake, libtool, gnulib). Именно с его помощью создаются знакомые всем нам сценарии configure, которые и генерируют make-файлы для сборки приложения. Система GNU build system настолько тесно связана с историей Linux и других открытых проектов, что «мантра» configure && make && make install рассматривается некоторыми Unix-программистами как единственно верный способ установки ПО. К недостаткам Autotools можно отнести ее ориентацию на инструментарий разработчика GNU (GNU make, GCC и т.п.), который очень популярен на открытых Unix-платформах, но мало распространен в других средах. Стремяcь заполнить этот пробел, разработчики из компании Kitware создали свой собственный вариант кросс-платформенного генератора сборочных файлов – CMake (Cross-platform Make).

Система CMake выбрана в качестве стандартного средства сборки KDE 4, и уже по одной этой причине заслуживает нашего внимания. Но у нее есть и собственные достоинства. Прежде всего, CMake является по-настоящему кросс-платформенным генератором проектов, позволяющим создавать их единые описания для Linux, других Unix-систем (включая Mac OS X) и Windows. Остановимся на этом подробнее. Важное отличие Windows от Linux (с точки зрения разработчика) заключается в отсутствии единого стандарта сборочных файлов. Microsoft Visual Studio использует свои файлы проектов, C++ Builder – свои, MinGW – свои. Преимущество CMake в том,что эта система способна генерировать «родные» сборочные файлы для всех перечисленных средств разработки (как и для многих других). Кроме того, CMake стремится максимально использовать фирменные средства генерации сборочных файлов – например, для проектов Qt применяется qmake. Вдобавок CMake обладает интеллектуальной системой поиска инструментов сборки и библиотек на конкретной платформе (интроспекция) и автоматического конфигурирования. Благодаря этому она сама устанавливает многие параметры сборочных файлов, которые в других случаях приходится задавать вручную. Например, в ОС Linux CMake найдет директорию, где находится требуемый программе набор виджетов, а под Windows вам не придется указывать ей, где установлены Visual Studio или C++ Builder. Все это делает пакет CMake весьма простым и удобным в использовании.

Хотя в этих статьях мы будем рассматривать работу CMake в основном на примере программ, написанных на C++, она может пригодиться и тем, кто пишет на Java (и даже Fortran).

Схематично работу CMake можно описать следующим образом: вначале создается файл CMakeLists.txt, в котором описываются параметры сборки (расположение исходных текстов, требуемые внешние модули, цели сборки). Далее этот файл передается утилите cmake. Результатом ее работы является файл, содержащий инструкции сборки приложения для конкретной платформы (make-файл GNU make, файл проекта Visual Studio и т.д.). Суть идеи заключается в том, что описание процесса сборки в файле CMakeLists.txt абстрагировано как от конкретных особенностей отдельных систем (расположение файлов, возможности компиляторов), так и целых платформ. Читая общее описание процесса сборки из файла CMakeLists.txt, программа cmake создает файл инструкций сборки, учитывающий специфику конкретной системы.

Как же CMake удается быть такой «умной»? В ее основе лежит мощный скриптовый язык, который используется как в файлах CMakeLists.txt, так и в специальных сценариях – модулях. Именно в модулях реализованы такие функции CMake, как поиск файлов и проверка возможностей системы. Файлы модулей расположены в поддиректории Modules каталога cmake. Их можно разделить на три категории. Одна группа модулей предназначена для настройки работы системы на конкретной платформе (Linux, Winodws, Mac OS, BeOS и т.д.), вторая обеспечивает интеллектуальный поиск средств разработки и различных вспомогательных утилит, а также провер- ку их возможностей, а третья разыскивает библиотеки, требуемые отдельным программам, и определяет их параметры.

Важную роль в работе CMake играют также файлы шаблонов для генерации различных файлов сборки. Поскольку файлы модулей и шаблонов отделены от самой утилиты cmake и написаны на том же языке сценариев, что и файлы описания сборки, расширить возможности CMake очень просто. CMake 2.6 поставляется с тремя сотнями модулей, которые адаптируют пакет для работы с множеством разных инструментов, начиная с компиляторов C++ и Fortran и интерпретаторов Perl и Python и заканчивая такими библиотеками, как OpenSceneGraph, SDL, Qt 4 и wxWidgets. Файлы модулей поставляются не только с дистрибутивами CMake, но и вместе с некоторыми библиотеками, разработчики которых уже заинтересованы в поддержке CMake.

Персональные инструменты
купить
подписаться
Яндекс.Метрика