Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Система построения проектов CMake. Учебник.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆

Заключение

На этом мы завершаем изучение системы CMake. Надеемся,
что к этому моменту читатели должны понять причины столь высокой популярности этого инструмента в среде разработчи­ков программного обеспечения. Несмотря на то что представ­ленный здесь материал больше подходит для начального осво­ения CMake, его вполне достаточно для решения многих типич­ных задач построения проектов, в том числе таких, решение ко­торых с помощью других систем требует больших усилий. В на­стоящем руководстве были рассмотрены методы решения сле­дующих задач:
— Описание простых проектов, состоящих из целей приложе-
ний и библиотек, настройка взаимосвязей между целями.
— Организация крупных проектов в виде нескольких более
простых проектов нижнего уровня, расположенных в раз­ных подкаталогах.
— Настройка построения целей: определение параметров
компиляции и компоновки, определение подкаталогов по­иска подключаемых файлов и подкаталогов для выход­ных файлов. Определение настроек для зависимых целей, что существенно упрощает подключение библиотек.
401
Заключение
— Организация хранения данных и пользовательских на-
строек построения в кэше, что позволяет ускорять последу­ющие запуски построения и организовать интерфейс его настроек.
— Реализация специальных целей, выполняющих генериро-
вание файлов исходных текстов по шаблону (аналогично
Autotools).
— Реализация целей, выполняющих тестирование проекта.
— Реализация целей установки результатов работы других
целей проекта, файлов, необходимых разработчикам (за­головочные файлы, библиотеки импорта, документация и т. д.), а также сценариев CMake, облегчающих подключе­ние библиотек сторонними проектами.
— Реализация аналогов фальшивых целей системы make, вы-
полняющих заданные последовательности вызова инстру­ментов, а также целей, генерирующих файлы при помо­щи произвольных наборов инструментов. Добавление вы­зовов собственных инструментов к другим целям. Вызы­ваемые инструменты могут быть как внешними, так и ре­зультатами исполнения других целей.
— Организация передачи различных настроек целям в зави-
симости от используемого набора инструментов компиля­тора, платформы, конфигурации и т. д.
— Использование в проектах некоторых популярных внеш-
них наборов библиотек и инструментов: Boost, Qt, OpenCV,
402
Заключение
Crypto++, системы управления версиями и создания доку­ментации.
Вместе с тем в настоящий учебник ввиду ограниченности
его объёма не вошло рассмотрение следующих важных вопро­сов:
— Реализация конфигурационных файлов CMake для разра-
батываемых пакетов при помощи стандартного модуля CMakePackageConfigHelpers. Конфигурационные файлы необходимы для того, чтобы пакеты можно было исполь­зовать в сторонних проектах, подключая их командой find_package(). При этом пакеты могут быть установле­ны в произвольные каталоги, все вспомогательные пути в конфигурационных файлах будут вычисляться относи­тельно их расположения.
— Аналогично, реализация модулей поиска для сторонних
пакетов, в составе которых отсутствуют конфигураци­онные файлы CMake. Модули поиска позволяют под­ключать такие пакеты при помощи той же команды find_package(). В их реализации, как и в реализации кон­фигурационных файлов, активно используются низкоуров­невые средства CMake для описания импортируемых це­лей.
— Создание пакетов установки в различных форматах (NSIS24,
ZIP, 7Z, RPM и т. д.) при помощи инструмента CPack и одно­имённого пакета, входящих в состав CMake.
24
http://nsis.sourceforge.net/ (дата обращения: 10.04.2015).
403
Заключение
— Использование других стандартных модулей CMake (око-
ло 160) для решения различных вспомогательных задач. В настоящем учебнике были рассмотрены лишь некото­рые из них.
— Создание сложных сценариев тестирования с возможно-
стями запуска тестов покрытия, анализа использования памяти, выгрузки результатов на сервер сбора статистики тестирования CDash25и т. д. при помощи сценариев ин­струмента CTest.
— Организация кросс-компиляции.
— Определение пользовательских свойств и определение
совместимости свойств целей библиотек и соответству­ющих свойств зависимых целей — аналогично некото­рым стандартным свойствам. Например, стандартное ло­гическое свойство POSITION_INDEPENDENT_CODE для цели определяет, будет ли она скомпилирована в код, не за­висящий от адреса загрузки (используется для разде­ляемых библиотек в системе Linux и т. д.). Свойство INTERFACE_POSITION_INDEPENDENT_CODE определяет тре­бование для зависимых целей устанавливать для себя свойство POSITION_INDEPENDENT_CODE таким же значени­ем. В противном случае система CMake выведет диагности­ческое сообщение. Такое же поведение можно определять для пользовательских свойств (логические значения, номе­ра версий и т. д.).
25
http://www.cdash.org/ (дата обращения: 10.04.2015).
404
Заключение
— Работа с файлами на низком уровне (чтение, запись,
копирование, поиск, загрузка и т. д.) при помощи команды file(), запуск процессов при помощи ко­манды execute_process(). В отличие от рассмотрен­ных в настоящем учебнике команд configure_file(), add_custom_target() и т. д., эти команды не определяют правил целей и выполняются только на этапе запуска ин­струмента CMake. Чтобы использовать их в определении целей (add_custom_target(), add_custom_command()), можно использовать вызов инструмента CMake (при помо­щи переменной CMAKE_COMMAND) с ключом «-P» (исполне­ние сценария, п. 2.1.2). Таким способом можно определять кроссплатформенные цели, запускающие процессы и вы­полняющие обработку файлов со сложной логикой.
— Определение экспериментов с компиляцией тестовых ис-
ходных файлов с возможными последующими попытка-
ми исполнения скомпилированных программ на этапе за­пуска инструмента CMake (аналогично системе Autotools) при помощи низкоуровневых команд. Были рассмотре­ны только некоторые стандартные модули, использующие эти команды, такие как CheckCXXSourceCompiles.
— Определение целей библиотек, состоящих из объектных
модулей, и определение исходных файлов и объектных мо­дулей для подключения к зависимым целям.
— Организация логически взаимосвязанных наборов файлов
и целей в виде именованных групп в генерируемых описа-
405
Заключение
ниях проектов для интегрированных сред разработки (Vi­sual Studio и т. д.). Интегрированные среды отображают та-
кие проекты в виде деревьев с именованными раскрываю­щимися группами целей и файлов, что существенно упро­щает для разработчиков ориентирование в крупных проек­тах.
Как можно видеть, несмотря на актуальность всех этих за­дач, их изучение может быть отложено начинающими пользо­вателями системы CMake на более поздние этапы её освоения.
Мы желаем всем разработчикам успехов в освоении лю­бых технологий, которые помогут облегчить их труд, а всем пользователям — как можно больше качественных программ­ных продуктов.
406

Библиография

1.
Бланшет Ж., Саммерфилд М. Qt 4. Программирование GUI на C++ : пер. с англ. — 2-е изд. — СПб. : КУДИЦ-Пресс, 2008. — 718 с. — ISBN 978-5-
91136-059-7.
2.
Боровский А. Интроспекция и логика//Linux Format. — 2008. — Окт. —
10 (110). — С. 92—95. — URL:
phtml (дата обращения: 18.12.2014).
3.
Боровский А. Раздвигая горизонты//Linux Format. — 2008. — Нояб. —
11 (111). — С. 82—84. — URL:
phtml (дата обращения: 18.12.2014).
4.
Боровский А. Собираясь в путь//Linux Format. — 2008. — Сент. — 9
(109). — С. 92—95. — URL:
phtml (дата обращения: 18.12.2014).
5.
Саммерфилд М. Qt. Профессиональное программирование. Разработка кроссплатформенных приложений на С++ : пер. с англ. — СПб. : Символ­плюс, 2011. — 560 с. — ISBN 978-5-93286-207-0.
6.
Соммервилл И. Инженерия программного обеспечения : пер. с англ. — 6-е изд. — М. : Вильямс, 2002. — 624 с. — ISBN 5-8459-0330-0.
http://www.linuxformat.ru/anons110.
http://www.linuxformat.ru/anons111.
http:/ / www . linuxformat . ru / anons109 .
7.
Хоффман Б., Мартин К. Разработка программного обеспечения в небольшой организации : пер. с англ.//Открытые системы. — 2007. —
№ 03. — URL:
ния: 18.12.2014).
http://www.osp.ru/os/2007/03/4158385/
(дата обраще-
407
Библиография
8.
Шлее М. Qt 5.3. Профессиональное программирование на C++. — СПб. : БХВ-Петербург, 2015. — 928 с. — (В подлиннике). — ISBN 978-5-9775-3346-
1.
9.
CMake 3.2 Documentation / Kitware, Inc. — Apr. 2015. — URL:
http://www.
cmake.org/cmake/help/v3.2/ (дата обращения: 02.05.2015).
10.
GNU Make Manual / Free Software Foundation. — 5 Oct. 2014. — URL:
http:
//www.gnu.org/software/make/manual/
11.
Martin K., Hoffman B. Mastering CMake. — 6th ed. — Kitware, Inc., Sept.
(дата обращения: 23.12.2014).
2013. — 641 p. — ISBN 978-1-930934-26-9.
12.
Miller P. A. Recursive Make Considered Harmful//AUUGN: The Journal of
AUUG Inc. — 1998. — Sept. — Vol. 19, no. 1. — P. 14–25. — ISSN 1035-
7521. — URL:
http://miller.emu.id.au/pmiller/books/rmch/
обращения: 26.12.2014).
13.
The Open Group Base Specifications Issue 7: IEEE Std 1003.1™, 2013 Edition /
The IEEE, The Open Group. — URL:
http : / / pubs . opengroup . org /
onlinepubs/9699919799/ (дата обращения: 24.12.2014).
14.
Thelin J. Foundations of Qt Development. — Apress, 2007. — 528 p. — ISBN 978-1-59059-831-3. — DOI: 10.1007/978-1-4302-0251-6.
(дата
408

Ответы на тесты

С. 42:
1. (a), (c). 2. (a), (b), (c), (e). С. 248:
1. (a). 2. (a). 3. (a). 4. (b). 5. (a). 6. (c). 7. (c). 8. (b). 9. (b).
10. (b). 11. (d). 12. (e), (h). 13. (c). 14. (b). 15. (g). С. 394:
1. (a). 2. (b). 3. (c). 4. (a). 5. (b). 6. (a). 7. (c). 8. (b).
409
Предметный указатель
Б
библиотека, 14 библиотека импорта, 87
В
входной файл, 17 выражения генераторов CMake, 222 выходной файл, 17
Г
генератор CMake, 45
Д
двухэтапное построение, 15
З
зависимость (по построению), 18
И
инкрементное построение, 15, 18 интегрированная среда разработки, 29 исполняемый модуль, 13 исходный модуль, 12
410
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]