Файл CMakeLists.txt
для сборки прикладной программы должен содержать следующие команды:
include (platform/nk)
– подключение библиотеки CMake
для работы с компилятором NK.project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO"
) – установка флагов компилятора и компоновщика.generate_edl_file()
.nk_build_idl_files()
nk_build_cdl_files()
nk_build_edl_files()
add_executable (<имя программы> "<путь к файлу исходного кода программы>")
– добавление цели для сборки программы.add_dependencies (<имя программы> <имя цели сборки edl.h файла>
) – добавление зависимости сборки программы от генерации edl.h-файла.target_link_libraries (<имя программы> <список библиотек>)
– определяет библиотеки, с которыми необходимо скомпоновать программу при сборке.Например, если программа использует файловый или сетевой ввод/вывод, то она должна быть скомпонована с транспортной библиотекой vfs::client
.
CMake
-описания системных программ и драйверов, поставляемых в составе KasperskyOS Community Edition, а также их экспортированных переменных и свойств находятся в соответствующих файлах /opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/lib/cmake/<имя программы>/<имя программы>-config.cmake
init.yaml
при сборке решения необходимо определить свойство EXTRA_CONNECTIONS
и присвоить ему значение с описаниями нужных IPC-каналов.Обратите внимание на отступы в начале строк в свойстве EXTRA_CONNECTIONS
. Эти отступы необходимы для корректной подстановки значений в файл init.yaml
и должны соответствовать требованиям к его синтаксису.
Пример создания IPC-канала между процессами Client
и Server
:
set_target_properties (Client PROPERTIES
EXTRA_CONNECTIONS
" - target: Server
id: server_connection")
В результате, при сборке решения, описание этого IPC-канала будет автоматически добавлено в файл init.yaml
на этапе обработки макросов шаблона init.yaml.in.
main()
и словаря переменных окружения в файл init.yaml
при сборке решения, необходимо определить свойства EXTRA_ARGS
и EXTRA_ENV
и присвоить им соответствующие значения.Обратите внимание на отступы в начале строк в свойствах EXTRA_ARGS
и EXTRA_ENV
. Эти отступы необходимы для корректной подстановки значений в файл init.yaml
и должны соответствовать требованиям к его синтаксису.
Пример передачи программе Client
аргумента "-v"
функции main()
и переменной окружения VAR1
со значением VALUE1
:
set_target_properties (Client PROPERTIES
EXTRA_ARGS
" - \"-v\""
EXTRA_ENV
" VAR1: VALUE1")
В результате, при сборке решения, описание аргумента функции main()
и значение переменной окружения будут автоматически добавлены в файл init.yaml
на этапе обработки макросов шаблона init.yaml.in.
Пример файла CMakeLists.txt для сборки простой прикладной программы
CMakeLists.txt
project (hello)
# Подключение CMake-библиотеки nk для работы с компилятором NK (nk-gen-c).
include (platform/nk)
# Установка флагов компилятора и компоновщика.
project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO")
# Задаем имя проекта, в который входит программа.
set (LOCAL_MODULE_NAME "example")
# Задаем имя программы.
set (TASK_NAME "Hello")
# Обратите внимание на содержание шаблонов init.yaml.in и security.psl.in
# В них имена программ задаются как ${LOCAL_MODULE_NAME}.${TASK_NAME}
# Задаем цели, которые будут использованы для создания генерируемых файлов программы.
set (TASK_IDL_TARGET ${TASK_NAME}_idl)
set (TASK_CDL_TARGET ${TASK_NAME}_cdl)
set (TASK_EDL_TARGET ${TASK_NAME}_edl)
# Добавляем цель сборки idl.h-файла.
nk_build_idl_files (${TASK_IDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
IDL "../resources/Hello.idl"
)
# Добавляем цель сборки cdl.h-файла.
nk_build_cdl_files (${TASK_CDL_TARGET}
IDL_TARGET ${TASK_IDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
CDL "../resources/Hello.cdl"
)
# Добавляем цель сборки EDL-файла. Переменная EDL_FILE экспортируется
# и содержит путь до сгенерированного EDL-файла.
generate_edl_file (${TASK_NAME}
PREFIX ${LOCAL_MODULE_NAME}
)
# Добавляем цель сборки edl.h-файла.
nk_build_edl_files (${TASK_EDL_TARGET}
NK_MODULE ${LOCAL_MODULE_NAME}
EDL ${EDL_FILE}
)
# Определяем цель для сборки программы.
add_executable (${TASK_NAME} "src/hello.c")
# Библиотеки, с которыми программа компонуется при сборке.
target_link_libraries (${TASK_NAME}
PUBLIC vfs::client # Программа использует файловый ввод/вывод
# и должна быть подключена как клиент к VFS
)
# Добавление к цели Hello зависимости от цели Hello_edl.
# Генерация edl.h-файла должна произойти ранее сборки цели Hello.
add_dependencies (${TASK_NAME} ${TASK_EDL_TARGET})
В начало