-
Notifications
You must be signed in to change notification settings - Fork 5
Использование CMake для проектов на C и CPP
Для сборки криптографической библиотеки мы используем CMake в качестве фронтенда.
CMake — кросс-платформенное семейство инструментов, созданных для сборки, тестирования и упаковки программного обеспечения. CMake позволяет контролировать процесс компиляции с помощью простых конфигурационных файлов, независимых от платформы и компилятора, а также генерировать нативные мейкфайлы и воркспейсы, работающие во многих средах.
Используя CMake, можно не только генерировать мейкфайлы Unix для сборки и тестирования с помощью команд make
и make test
, но также и полнофункциональные проекты Microsoft Visual Studio или Apple Xcode, то есть для разработки можно продолжать использовать IDE, которая вам нравится.
Все настройки сборки прописаны в файле CMakeLists.txt
.
Прежде всего необходимо установить CMake. Загрузить его для вашей операционной системы можно здесь. Установите инструмент и выполните следующие инструкции
- Откройте CMake.
- В первом текстовом поле (source code) пропишите путь до директории с файлом
CMakeLists.txt
, в нашем случае — папкиGroupLockCrypto
. - Во втором поле (binaries) пропишите путь до папки
Build
. - Нажмите Configure. Выберите, для какой среды вы хотите сгенерировать проект: Visual Studio, Makefile или какой-то другой.
- Когда закончится конфигурирование, нажмите Generate. После этого в директории
Build
появятся файлы сгенерированных проектов.
- Убедитесь в наличии утилит CMake для командной строки и при необходимости установите их (Tools → How To Install For Command Line Use).
- Смените текущую директорию на
Build
(GroupLockCrypto/Build
) - Выполните команду
cmake ..
(обратите внимание на точки!), если хотите сгенерировать мейкфайл — это происходит по умолчанию, если другие возможности не указаны в качестве параметров. В противном случае выполнитеcmake .. -G <generator name>
. Замените<generator name>
на"Visual Studio 15"
илиXcode
или whatever you want.
Когда всё готово и необходимые файлы сгенерированы, вы можете работать над проектом в той среде, в которой привыкли. Важно следить за тем, чтобы исходники не покидали папку Source
, так как в текущей конфигурации CMake ищет все файлы с расширениями *.h и *.cpp, находящиеся в этой папке.
Важно: Не коммитьте файлы, сгенерированные CMake. После генерации воркспейса для вашей любимой IDE можно создавать, удалять и изменять исходники (опять же, чтобы они не покидали директории Source/
), коммитить их, пушить и выгружать с сервера. Если в файле CMakeLists.txt
что-то изменится, CMake переконфигурирует и сгенерирует заново проект, как только вы нажмёте Build, так что нет никакого смысла держать эти сгенерированные файлы в репозитории.
В этой статье мы не будем полностью описывать синтаксис и схему работы конфигов CMake. Её цель — рассказать вкратце и как можно более понятно о том, как добавить внешнюю библиотеку в проект.
Прежде всего нужно организовать правильную иерархию директорий. На настоящий момент используется следующая иерархия:
GroupLockCrypto
|---- Build
| |---- .gitignore
|
|---- Source
| |---- *.h
| |---- *.cpp
|
|---- libsodium
| |---- Darwin
| | |---- libsodium.a
| |
| |---- Linux
| | |---- libsodium.a
| |
| |---- Windows
| | |---- libsodium.lib
| |
| |---- include
| |---- *.h
|
|----CMakeLists.txt
В корне находится конфигурационный файл CMakeLists.txt
. Директория Build
предназначена для исполнения в ней команды cmake ..
— CMake складывает в неё сгенерированные файлы. Мы не хотим, чтобы они попали в репозиторий, поэтому файл .gitignore
предотвращает попадание в репозиторий всего содержимого Build
, кроме себя.
Директория Source
содержит исходные коды и заголовки основного проекта, в данном случае — нашей криптографической библиотеки.
Все остальные директории в корне служат для внешних библиотек. Допустим, мы хотим подключить к нашему проекту библиотеку libsodium. Мы также хотим без особых усилий подключать заголовки этой библиотеки в исходниках. Нам нужно только организовать иерархию и добавить имя библиотеки в CMakeLists.txt
, а всё остальное CMake сделает за нас.
Для начала создадим в корне папку libsodium
и поместим внутрь четыре поддиректории: include
, Darwin
, Linux
и Windows
. В первой будут лежать все заголовочные файлы внешней библиотеки, которые мы сможем подключать. В трёх остальных директориях, названия которых совпадают с названиями операционных систем, лежат скомпилированные файлы импортируемой нами библиотеки. (В папке Darwin
— файлы для macOS, ибо в основе macOS лежит операционная система Darwin). Имена этих файлов без расширения также должны совпадать с именем библиотеки.
Теперь добавим имя нашей библиотеки в конфиг. В секции IMPORTED LIBRARIES
файла CMakeLists.txt
есть строка
set(IMPORTED_LIBS libsodium)
Эта строка устанавливает значение переменной IMPORTED_LIBS
как libsodium
и это всё, что нам нужно сделать. Если мы хотим несколько библиотек, нужно просто перечислить их имена через пробел:
set(IMPORTED_LIBS libsodium libdispatch libwhatever)
(Не забыв, разумеется, точно так же для каждой из них организовать иерархию директорий.)
- Стили кодирования
- [Java](Код стайл для языка Java)
- [C/C++](Стиль написания кода на С )
- [C#](Стиль написания кода на С# )
- [Swift](Руководство по оформлению кода на языке Swift )
- Написание комментариев к коммитам
- Android
- Android DevGuide
- [QR codes](Работа c QR на Android)
- [Полезные вещи](Полезные вещи для Android разработки)
- [Архитектура приложения](Архитектура приложения)
- [Используемые компоненты](Используемые компоненты)
- [Инструкция по сборке проекта](Инструкция по сборке проекта)
- iOS
- [Код на C++ под iOS](Использование кода и библиотек cpp при создании приложений на языке Swift)
- Стилевые таблицы NSS
- Структура проекта в Xcode
- Clean Architecture
- C и C++
- [Использование CMake для проектов на C++ и C ](Использование CMake для проектов на C и CPP)
- Форматы файлов
- [.bmp](Cтруктура хранения bmp файлов)
- [.jpg](Cтруктура хранения jpg файлов)
- [.png](Cтруктура хранения png файлов)
- Алгоритмы шифрования
- Кодирование информации псевдослучайными последовательностями чисел
- Визуальная криптография
- Схема разделения секретной визуальной информации
- Шифрование RGB изображения с помощью Фурье образа
- RSA-шифрование .bmp файлов
- Примеры использования
- [Библиотека матричной алгебры](Пример использования библиотеки матричной алгебры)
- Описание процесса кодирования файла
- Способ обезопасить использование приложения
- Java фасад библиотеки алгоритмов
- Алгоритм шифрования bmp на java заглушке
- Матричная арифметика
- [A+B](Сложение матриц)
- [A*p](Умножение матрицы на скаляр)
- [A*B](Умножение матриц)
- [Обратные матрицы](Нахождение обратной матрицы)
- Взятие по модулю
- [A
mod
p](Взятие матрицы по модулю простого числа) - [A
mod
P](Взятие матрицы по модулю - матрицы из простых чисел)
- Суперпозиция (модуль - простое число)
- [A+B
mod
p](Сложение матриц по модулю простого числа) - [A*c
mod
p](Умножение матрицы на скаляр по модулю простого числа) - [A*B
mod
p](Умножение матриц по модулю простого числа)
- Суперпозиция (модуль - матрицы из простых чисел)
- [A+B
mod
P](Сложение матриц по модулю - матрице простых чисел) - [A*c
mod
P](Умножение матрицы на скаляр по модулю - матрице простых чисел) - [A*B
mod
P](Умножение матриц по модулю - матрице простых чисел)
##Прочее
- [Утечки памяти](Memory Leaks)
- [Базовые цвета](Базовые цвета)
- [Clean Architecture](Clean Architecture)