Упаковываем исходники библиотеки в пакет для Keil
Учимся делать пакеты для Keil.
Плюс Keil'а в идущих "из коробки" пакетах, включающих поддержку микроконтроллеров, а так же библиотеки программирования.
В этой заметки поговорим о том, как упаковать библиотеку в пакет. Поясню для чего - после создания проекта можно просто включить в меню необходимые библиотеки, не копировать в папку проекта и не ссылаться на них.
Для начала стоит сказать что файл с расширением ".pack" - это zip-архив, в который включены необходимые файлы библиотек, документация и файл описания с расширение ".pdsc".
Для примера упакуем библиотеку math и драйвер для датчика температуры LM75.
Описание пакета выполняется в XML формате.
<!--?xml version="1.0" encoding="utf-8"?-->
<package schemaversion="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:nonamespaceschemalocation="PACK.xsd">
<!-- Здесь вписывается название производителя -->
<vendor>devprodest</vendor>
<!-- Наименование пакета -->
<name>LIB</name>
<!-- Описание пакета -->
<description>Библиотеки и драйверы для устройств</description>
<!-- url -->
<url>https://cdeblog.ru</url>
<!-- Блок описания ревизий -->
<releases>
<!-- номер версии и дата выпуска, а внутри изменения -->
<release version="1.0.2" date="2017-09-22">
Добавил функции:
* MATH_hypot(X, Y)
* MATH_max(X, Y)
* MATH_min(X, Y)
* MATH_exp2(X)
</release>
<!-- таких ревизий может быть несколько -->
<release version="1.0.1" date="2017-09-21">
Добавил драйвер для температурного датчика LM75
</release>
<release version="1.0.0" date="2017-09-19">
Библиотека математических функций
</release>
</releases>
<!-- Ещё не очень разбирался для чего это пока просто оставил -->
<conditions>
<condition id="Cortex-M Device">
<description>Cortex-M processor based device: Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4</description>
<accept dcore="Cortex-M0">
<accept dcore="Cortex-M0+">
<accept dcore="Cortex-M3">
<accept dcore="Cortex-M4">
</accept></accept></accept></accept></condition>
</conditions>
<!-- теперь самое интересное - блок с компонентами -->
<components>
<!-- Группа компонентов. Здесь важную роли играет атрибут Cclass -->
<bundle cbundle="Devprodest Lib" cclass="DEVPRODEST" cversion="1.0.1">
<!-- Описание группы -->
<description>Библиотеки и драйверы для устройств</description>
<!-- ссылка -->
<doc>https://gitlab.com/devprodest/periph-drivers</doc>
<!-- группа Lib и название подключаемого модуля math -->
<component cgroup="Lib" csub="math">
<!-- Описание -->
<description>Библиотека с различными математическими функциями</description>
<!-- далее идут различные файлы -->
<files>
<!-- category = header|source|doc|other -->
<!-- name = путь к файлу -->
<file category="header" name="lib\math\usr_math.h">
<file category="source" name="lib\math\usr_math.c">
</file></file></files>
</component>
<component cgroup="Drivers" csub="lm75">
<description>Драйвер для работы с датчиком температуры LM75</description>
<files>
<file category="header" name="driver\lm75\lm75.h">
<!-- attr="config" говорит что этот файл будет редактируемый -->
<file category="header" name="driver\lm75\lm75_config.h" attr="config">
<file category="source" name="driver\lm75\lm75.c">
</file></file></file></files>
</component>
<!-- Если нужно добавляем ещё блоки компонентов -->
</bundle>
</components>
</package>
В программе описание выглядит следующим образом.
В установщике пакетов:
В окне выбора пакетов:
Для автоматизации упаковки написан скрипт.
@"c:\Program Files\7-Zip\7z.exe" a "devprodest.Lib.pack" -r -tzip "driver\"
@"c:\Program Files\7-Zip\7z.exe" a "devprodest.Lib.pack" -r -tzip "lib\"
@"c:\Program Files\7-Zip\7z.exe" a "devprodest.Lib.pack" -r -tzip "devprodest.Lib.pdsc"
Файлы доступны в Gitlab, проект "periph-drivers".
Пакет: devprodest.Lib.pack - Прошу отписаться об ошибках и пожеланиях.