ZRabadaber / cmake

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Использование

CMAKE модули сборки

  • В опциях cmake добавить переменную CMAKE_MODULE_PATH указывающую на каталог репозитория.
  • В файле CMakeLists.txt проекта использовать как include(_имя_cmake_модуля_).

Система модулей

Подключаемые модули могут ссылаться на все заголовочные файлы и определения всех подключенных модулей и основного проекта. Зависимость модулей разрешается путем последовательности добавления модулей в CMakeLists.txt основного проекта

Включение системы модулей:

include(modules)

Добавление модулей:

module(moduleName params)

,где

moduleName - наименование модуля (имя собранной библиотеки модуля)

params - параметры аналогичные параметрам функции FetchContent_Declare (см. документацию на cmake)

Разрешение модулей

modules_ready()

После разрешения модулей определены следующие переменные:

moduleName_SOURCE_DIR - абсолютный путь к исходным файлам модуля

moduleName_BINARY_DIR - абсолютный путь к артефактам сборки модуля

MODULES - перечень всех артефактов подключенных модулей. Эту переменную следует использовать на этапе линковки программы:

target_link_libraries(${PROJECT_NAME} ${MODULES})

Система компонентов

Система компонентов это часть системы модулей. Компонент представляет собой часть кода с определенным интерфейсом, функции которого автоматически вызываются основной программой. Каждый модуль может содержать несколько компонентов.

Включение системы компонентов

Система компонентов включается путем добавления в проект файлов components.c/h

файл components.h служит общим заголовочным файлом и должен быть включен в модуле содержащем компонент.

файл components.c включается в коде основной программы #include "components.c" и НЕ включается в сборку!

В коде основной программы следует вызвать следуюшие функции для активации компонентов:

  • на этапе пре-инициализации COMPONENTS_FOREACH_CALL(define)
  • на этапе инициализации COMPONENTS_FOREACH_CALL(init)
  • на этапе работы (периодически) COMPONENTS_FOREACH_CALL(run)

Реализация компонента

Для реализации компонента необходимо:

  • создать файл component.h в котором необходимо включить заголовойный файл #include "components.h" и объявить экземпляр компонента extern component_t _cmp_one; с уникальным именем в рамках всего проекта
  • Реализовать указанный экземпляр
  • В файле CMakeLists.txt модуля определить на вышестоящем уровне переменную COMPONENTS с перечнем указателей на экземпляры компонентов (через запятую если их больше одного) set(COMPONENTS "&_cmp_one" PARENT_SCOPE)

About


Languages

Language:CMake 90.9%Language:C 9.1%