Файл 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})
В начало