Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Система построения проектов CMake. Учебник.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Д. В. ДУБРОВ
СИСТЕМА ПОСТРОЕНИЯ ПРОЕКТОВ CMAKE
Учебник
Ростов-на-Дону
Издательство Южного федерального университета
УДК 681.3 ББК 32.85
Д79
Печатается по решению Редакционно-издательского совета
Южного федерального университета
(протокол №3 от 23 ноября 2015 г.)
Рецензенты:
кандидат физико-математических наук, доцент кафедры алгебры и
дискретной математики мехмата ЮФУ
М. Э. Абрамян;
кандидат физико-математических наук, доцент кафедры программного
обеспечения вычислительной техники и автоматизированных систем
факультета информатики и вычислительной техники ДГТУ
В. А. Стукопин
Дубров, Д.В.
Д79
ной системой для описания программных проектов и обладает богатыми возможностями. В учебнике изложен материал, достаточный для созда­ния при помощи CMake проектов со сложной структурой, использующих внешние библиотеки или вспомогательные инструменты разработчика.
ханики и компьютерных наук им. И.И. Воровича Южного федерального университета по направлению подготовки «Фундаментальная информати­ка и информационные технологии», изучающих курс «Разработка кросс­платформенных приложений». Также учебник может быть полезен всем студентам, аспирантам и специалистам, которые участвуют в разработке сложных программных проектов.
Система построения проектов CMake : учебник / Д. В. Дубров ; Южный федеральный университет. — Ростов-на-Дону : Издательство Южного федерального университета, 2015. — 419 с.
ISBN 978-5-9275-1852-4
Работа посвящена инструменту CMake, который является современ-
Учебник предназначен для магистрантов Института математики, ме-
ISBN 978-5-9275-1852-4 УДК 681.3
ББК 32.85
© Южный федеральный университет, 2015 © Дубров Д. В., 2015
Оглавление
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1. Принципы работы систем автоматического
построения . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1. Модульное программирование . . . . . . . . . . . . . 11
1.2. Автоматизация построения проектов . . . . . . . . . 16
1.3. Обзор инструментов построения проектов . . . . . . 22
1.3.1. make . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.2. Autotools. . . . . . . . . . . . . . . . . . . . . . . 26
1.3.3. Интегрированные среды разработки . . . . . . 29
1.3.4. qmake . . . . . . . . . . . . . . . . . . . . . . . . 35
1.3.5. CMake . . . . . . . . . . . . . . . . . . . . . . . . 39
1.4. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . 42
1.4.1. Тест рубежного контроля . . . . . . . . . . . . . 42
1.4.2. Проектное задание . . . . . . . . . . . . . . . . 43
2. Основы языка CMake . . . . . . . . . . . . . . . . . . . . . 45
2.1. Основные концепции . . . . . . . . . . . . . . . . . . . 45
2.1.1. Генераторы . . . . . . . . . . . . . . . . . . . . . 45
2.1.2. Входные файлы . . . . . . . . . . . . . . . . . . 47
2.1.3. Пути . . . . . . . . . . . . . . . . . . . . . . . . . 48
3
Оглавление
2.2. Синтаксис . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.2.1. Команды . . . . . . . . . . . . . . . . . . . . . . 50
2.2.2. Строки. . . . . . . . . . . . . . . . . . . . . . . . 51
2.2.3. Переменные . . . . . . . . . . . . . . . . . . . . 56
2.2.4. Свойства . . . . . . . . . . . . . . . . . . . . . . 60
2.2.5. Регулярные выражения. . . . . . . . . . . . . . 62
2.3. Примеры простых проектов . . . . . . . . . . . . . . . 65
2.4. Команды общего назначения . . . . . . . . . . . . . . 73
2.4.1. cmake_minimum_required() . . . . . . . . . . . 73
2.4.2. project(). . . . . . . . . . . . . . . . . . . . . . 74
2.4.3. include(). . . . . . . . . . . . . . . . . . . . . . 76
2.4.4. message(). . . . . . . . . . . . . . . . . . . . . . 79
2.5. Команды описания целей . . . . . . . . . . . . . . . . 81
2.5.1. add_executable() . . . . . . . . . . . . . . . . . 81
2.5.2. add_library() . . . . . . . . . . . . . . . . . . . 83
2.5.3. add_subdirectory() . . . . . . . . . . . . . . . 91
2.6. Команды настроек целей . . . . . . . . . . . . . . . . . 92
2.6.1. include_directories() . . . . . . . . . . . . . 92
2.6.2. target_include_directories() . . . . . . . . 94
2.6.3. add_definitions(), add_compile_options() . 98
2.6.4. target_compile_definitions() . . . . . . . . 101
2.6.5. target_compile_options() . . . . . . . . . . . 102
2.6.6. target_compile_features() . . . . . . . . . . 103
2.6.7. target_link_libraries() . . . . . . . . . . . . 105
2.6.8. add_dependencies() . . . . . . . . . . . . . . . 113
2.7. Команды обработки данных . . . . . . . . . . . . . . . 114
2.7.1. set(), unset(), option() . . . . . . . . . . . . . 114
4
Оглавление
2.7.2. math() . . . . . . . . . . . . . . . . . . . . . . . . 118
2.7.3. list() . . . . . . . . . . . . . . . . . . . . . . . . 119
2.7.4. string() . . . . . . . . . . . . . . . . . . . . . . 123
2.8. Команды управляющих конструкций . . . . . . . . . 130
2.8.1. if(), elseif(), else(), endif(). . . . . . . . . 130
2.8.2. while(), endwhile(), break(), continue() . . 140
2.8.3. foreach(), endforeach(). . . . . . . . . . . . . 141
2.8.4. function(), endfunction(), return() . . . . . 146
2.9. Команды работы с файлами . . . . . . . . . . . . . . . 150
2.9.1. get_filename_component() . . . . . . . . . . . 150
2.9.2. find_file(), find_library(), find_path(),
find_program() . . . . . . . . . . . . . . . . . . 155
2.10. Команды добавления специальных целей . . . . . . . 160
2.10.1. configure_file(). . . . . . . . . . . . . . . . . 160
2.10.2. add_test(), enable_testing() . . . . . . . . . 166
2.10.3. install(). . . . . . . . . . . . . . . . . . . . . . 174
2.10.4. add_custom_target(). . . . . . . . . . . . . . . 189
2.10.5. add_custom_command() . . . . . . . . . . . . . . 195
2.11. Прочие команды. . . . . . . . . . . . . . . . . . . . . . 201
2.11.1. find_package() . . . . . . . . . . . . . . . . . . 201
2.11.2. get_property(), set_property() . . . . . . . . 209
2.12. Поддержка нескольких конфигураций построения . 217
2.12.1. Виды конфигураций . . . . . . . . . . . . . . . . 217
2.12.2. Выражения генераторов . . . . . . . . . . . . . 222
2.12.3. Информационные выражения. . . . . . . . . . 227
2.12.4. Логические выражения . . . . . . . . . . . . . . 235
2.12.5. Преобразующие выражения . . . . . . . . . . . 237
5
Оглавление
2.12.6. Вспомогательные выражения . . . . . . . . . . 247
2.13. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . 248
2.13.1. Тест рубежного контроля . . . . . . . . . . . . . 248
2.13.2. Проектное задание . . . . . . . . . . . . . . . . 254
3. Примеры использования пакетов. . . . . . . . . . . . . . 256
3.1. OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
3.2. Boost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
3.2.1. Интерфейс подключения библиотек . . . . . . 267
3.2.2. Подключение заголовочной библиотеки. . . . 272
3.2.3. Подключение библиотеки с модулем
компоновки . . . . . . . . . . . . . . . . . . . . 278
3.2.4. Частичная подмена стандартной библиотеки. 284
3.3. Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
3.3.1. Интерфейс подключения библиотек . . . . . . 292
3.3.2. Использование инструментов Qt . . . . . . . . 303
3.3.3. Локализация приложения . . . . . . . . . . . . 324
3.3.4. Установка приложения . . . . . . . . . . . . . . 334
3.4. Crypto++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
3.5. Инструменты разработки . . . . . . . . . . . . . . . . 371
3.5.1. Управление версиями. . . . . . . . . . . . . . . 371
3.5.2. Генерирование документации. . . . . . . . . . 378
3.6. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . 394
3.6.1. Тест рубежного контроля . . . . . . . . . . . . . 394
3.6.2. Проектное задание . . . . . . . . . . . . . . . . 397
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Библиография . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Ответы на тесты . . . . . . . . . . . . . . . . . . . . . . . . . . 409
6
Оглавление
Предметный указатель. . . . . . . . . . . . . . . . . . . . . . 409
7

Введение

Настоящую работу можно рассматривать как вводное ру­ководство по системе построения проектов CMake1. Учебник предназначен для студентов мехмата ЮФУ, изучающих курс
«Разработка кроссплатформенных приложений», а также мо-
жет быть полезным разработчикам программного обеспечения, планирующим внедрение данного инструмента в своей рабо­те и приступающим к его освоению. Использование CMake мо­жет упростить выполнение курсовых или выпускных студен­ческих работ, связанных с использованием свободно распро­страняемых библиотек. Несмотря на высокую популярность си­стемы CMake, ставшей в последние годы де-факто стандартом в индустрии программного обеспечения, к сожалению, имеет­ся очень мало учебных материалов, посвящённых этой системе. Единственный печатный учебник на английском языке — Mas- tering CMake [11], авторами которого являются разработчики са­мой системы, на русском языке подобных изданий нет вообще.
В данном учебнике рассматриваются следующие вопросы:
— принципы работы системы CMake, сравнение её с другими
аналогичными средствами;
1
http://www.cmake.org/ (дата обращения: 24.02.2015).
8
Введение
— описание и построение простых проектов с помощью си-
стемы CMake;
— основные конструкции языка CMake;
— организация построения при помощи системы CMake про-
граммных проектов, использующих внешние библиоте­ки и инструменты. В частности, будут рассмотрены во­просы построения проектов, использующих набор библио­тек Qt [1; 8].
Выбор рассматриваемых в учебнике библиотек неслучаен: помимо их высокой популярности, каждая из них требует от­дельного подхода при подключении к проекту, управляемому системой CMake. Примеры рассматриваются в порядке возраста­ния сложности: от набора библиотек OpenCV, в котором встрое­на поддержка CMake, до библиотеки Crypto++, для которой необ­ходимо вручную реализовывать все операции по поиску и под­ключению. Продемонстрированные в соответствующих разде­лах приёмы могут оказаться полезными при работе со многими другими библиотеками. Поэтому они по возможности оформле­ны в виде, облегчающем повторное использование.
Большинство приводимых в учебнике примеров ориенти­рованы на сферу практического применения системы CMake. При необходимости даются минимальные сведения об исполь­зуемых библиотеках и инструментах. Каждый из примеров со­провождается подробными инструкциями по его сборке. Рас­сматриваются наиболее типичные проблемы, которые могут возникнуть у читателя, желающего повторить описанные экс-
9
Введение
перименты. Из-за всего этого в тексте учебника содержится большое количество информации, не имеющей прямого отно­шения к CMake, но необходимой для понимания типичных сце­нариев использования тех или иных его средств.
На момент написания данного учебника последними до­ступными стабильными версиями ПО, которые использовались для проверки примеров, являлись:
— CMake 3.3.2;
— OpenCV 2.4.11 и 3.0.0;
— Boost 1.59.0;
— Qt 5.5.0;
— Crypto++ 5.6.2;
— Doxygen 1.8.10;
— GraphViz 2.38.
Текущий документ имеет версию 1.0.
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]