KasperskyOS Community Edition 1.2

Библиотеки CMake в составе KasperskyOS Community Edition

Этот раздел содержит описание библиотек, поставляемых в KasperskyOS Community Edition и предназначенных для автоматизации сборки решения на базе KasperskyOS.

В этом разделе

Библиотека platform

Библиотека nk

Библиотека image

В начало
[Topic cmake_libs]

Библиотека platform

Библиотека platform содержит следующие команды:

  • initialize_platform() – команда для инициализации библиотеки platform.

    Команда initialize_platform() может вызываться с параметром FORCE_STATIC, который включает принудительную статическую компоновку исполняемых файлов:

    • По умолчанию, если тулчейн в составе KasperskyOS SDK поддерживает динамическую компоновку, то команда initialize_platform() делает так, что для сборки всех исполняемых файлов, заданных через CMake-команды add_executable(), флаг -rdynamic используется автоматически.
    • При вызове initialize_platform (FORCE_STATIC) в корневом файле CMakeLists.txt тулчейн, поддерживающий динамическую компоновку, выполняет статическую компоновку исполняемых файлов.

    Команда initialize_platform() может вызываться с параметром NO_NEW_VERSION_CHECK, который отключает проверку наличия обновлений SDK и передачу версии SDK на сервер "Лаборатории Касперского".

    Чтобы отключить проверку наличия обновлений SDK и передачу данных версии SDK на сервер Kaspersky при сборке решения используйте следующий вызов: initialize_platform(NO_NEW_VERSION_CHECK). Подробнее о политике предоставления данных см. "Предоставление данных".

  • project_static_executable_header_default() – команда для включения принудительной статической компоновки исполняемых файлов, заданных через последующие CMake-команды add_executable() в одном файле CMakeLists.txt. Тулчейн, поддерживающий динамическую компоновку, выполняет статическую компоновку этих исполняемых файлов.
  • platform_target_force_static() – команда для включения принудительной статической компоновки исполняемого файла, заданного через CMake-команду add_executable(). Тулчейн, поддерживающий динамическую компоновку, выполняет статическую компоновку этого исполняемого файла. Например, если вызываются CMake-команды add_executable(client "src/client.c") и platform_target_force_static(client), то для программы client выполняется статическая компоновка.
  • project_header_default() – команда для указания флагов компиляции.

    Параметры команды задаются в виде пар, состоящих из флага компиляции и его значения: "FLAG_1:VALUE_1" "FLAG_2:VALUE_2" ... "FLAG_N:VALUE_N". CMake-библиотека platform преобразует эти пары в параметры компилятора. Часто используемые флаги компиляции для компиляторов С и С++ из набора GCC, а также значения этих флагов приведены в таблице ниже.

    Флаг компиляции

    Значение YES

    Значение NO

    Значение по умолчанию

    STANDARD_ANSI

    Используются стандарты ISO C90 и 1998 ISO C++.

    Для компиляторов C и C++ значение преобразуется в параметр: -ansi.

    Стандарты ISO C90 и 1998 ISO C++ не используются.

    STANDARD_ANSI:NO

    STANDARD_C99

    Используется стандарт ISO C99.

    Для компилятора C значение преобразуется в параметр: -std=c99.

    Стандарт ISO C99 не используется.

    STANDARD_C99:NO

    STANDARD_GNU_C99

    Используется стандарт ISO C99 с расширениями GNU.

    Для компилятора C значение преобразуется в параметр: -std=gnu99.

    Стандарт ISO C99 с расширениями GNU не используется.

    STANDARD_GNU_C99:NO

    STANDARD_11

    Используются стандарты ISO C11 и 2011 ISO C++.

    Для C-компилятора значение преобразуется в параметр -std=c11 или -std=c1x в зависимости от версии компилятора.

    Для компилятора C++ значение преобразуется в параметр -std=c++11 или -std=c++0x в зависимости от версии компилятора.

    Стандарты ISO C11 и 2011 ISO C++ не используются.

    STANDARD_11:NO

    STANDARD_GNU_11

    Используются стандарты ISO C11 и 2011 ISO C++ с расширениями GNU.

    Для C-компилятора значение преобразуется в параметр -std=gnu1x или -std=gnu11 в зависимости от версии компилятора.

    Для компилятора C++ значение преобразуется в параметр -std=gnu++0x или -std=gnu++11 в зависимости от версии компилятора.

    Стандарты ISO C11 и 2011 ISO C++ с расширениями GNU не используются.

    STANDARD_GNU_11:NO

    STANDARD_14

    Используется стандарт 2014 ISO C++.

    Для компилятора C++ значение преобразуется в параметр -std=c++14.

    Стандарт 2014 ISO C++ не используется.

    STANDARD_14:NO

    STANDARD_GNU_14

    Используется стандарт 2014 ISO C++ с расширениями GNU.

    Для компилятора C++ значение преобразуется в параметр -std=gnu++14.

    Стандарт 2014 ISO C++ с расширениями GNU не используется.

    STANDARD_GNU_14:NO

    STANDARD_17

    Используются стандарты ISO C17 и 2017 ISO C++.

    Для C-компилятора значение преобразуется в параметр -std=c17.

    Для компилятора C++ значение преобразуется в параметр -std=c++17.

    Стандарты ISO C17 и 2017 ISO C++ не используются.

    STANDARD_17:NO

    STANDARD_GNU_17

    Используются стандарты ISO C17 и 2017 ISO C++ с расширениями GNU.

    Для C-компилятора значение преобразуется в параметр -std=gnu17.

    Для компилятора C++ значение преобразуется в параметр -std=gnu++17.

    Стандарты ISO C17 и 2017 ISO C++ с расширениями GNU не используются.

    STANDARD_GNU_17:NO

    STRICT_WARNINGS

    Включены предупреждения для обнаружения потенциальных проблем и ошибок в коде на языках C и C++.

    Для компиляторов C и C++ значение преобразуется в следующие параметры: -Wcast-qual, -Wcast-align, -Wundef.

    Для компилятора C дополнительно используется параметр -Wmissing-prototypes.

    Предупреждения отключены.

    STRICT_WARNINGS:YES

    Если через параметры команды не заданы флаги компиляции вида STANDART_*, то по умолчанию используется параметр STANDARD_GNU_17:YES.

При использовании команд initialize_platform(FORCE_STATIC), project_static_executable_header_default() и platform_target_force_static() могут возникать ошибки компоновки, если статический вариант требуемых библиотек отсутствует (например, не собран или не поставлен в составе KasperskyOS SDK). Но даже при наличии статического варианта требуемых библиотек эти ошибки могут возникать из-за того, что при использовании команд initialize_platform(FORCE_STATIC), project_static_executable_header_default() и platform_target_force_static() система сборки по умолчанию может выполнять поиск динамического варианта требуемых библиотек, а не статического, как ожидается. Чтобы избежать ошибок, нужно, во-первых, обеспечить наличие статического варианта требуемых библиотек, во-вторых, настроить систему сборки на поиск статических библиотек (для некоторых библиотек этой возможности может не быть) либо явно задавать компоновку со статическими библиотеками.

Примеры настройки системы сборки на поиск статических библиотек:

set (fmt_USE_STATIC ON) find_package (fmt REQUIRED) set (fdn_USE_STATIC ON) find_package (fdn REQUIRED) set (sqlite_wrapper_USE_STATIC ON) find_package (sqlite_wrapper REQUIRED)

Пример, в котором явно задана компоновка со статической библиотекой:

target_link_libraries(${PROJECT_NAME} PUBLIC logger::logger-static)

Подробнее об использовании динамических библиотек см. "Использование динамических библиотек".

Эти команды используются в файлах CmakeLists.txt для программы Einit и прикладных программ.

В начало
[Topic cmake_platform_lib]

Библиотека nk

Этот раздел содержит описание команд и макросов библиотеки CMake-библиотеки для работы с компилятором NK.

В этом разделе

generate_edl_file()

nk_build_idl_files()

nk_build_cdl_files()

nk_build_edl_files()

Генерация транспортного кода для разработки на языке C++

В начало
[Topic cmake_nk_lib]

generate_edl_file()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>toolchain/share/cmake/Modules/platform/nk2.cmake.

generate_edl_file(NAME ...)

Команда генерирует EDL-файл с описанием класса процессов.

Параметры:

  • NAME – имя создаваемого EDL-файла. Обязательный параметр.
  • PREFIX – в этом параметре необходимо указать имя класса процессов, исключив из него имя EDL-файла. Например, если имя класса процессов, для которого создается EDL-файл, определено как kl.core.NameServer, то в параметре PREFIX необходимо передать значение kl.core.
  • EDL_COMPONENTS – имя компонента и его экземпляра, которые будут включены в EDL-файл. Например: EDL_COMPONENTS "env: kl.Env". Для включения нескольких компонентов нужно использовать несколько параметров EDL_COMPONENTS.
  • SECURITY – квалифицированное имя метода интерфейса безопасности, который будет включен в EDL-файл.
  • OUTPUT_DIR – директория, где будет создан EDL-файл. По умолчанию ${CMAKE_CURRENT_BINARY_DIR}.

В результате работы команды переменная EDL_FILE экспортируется и содержит путь до сгенерированного EDL-файла.

Пример вызова:

generate_edl_file(${ENTITY_NAME} EDL_COMPONENTS "env: kl.Env")

Пример использования команды см. в статье "Файлы CMakeLists.txt для сборки прикладных программ".

В начало
[Topic cmake_generate_edl]

nk_build_idl_files()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>toolchain/share/cmake/Modules/platform/nk2.cmake.

nk_build_idl_files(NAME ...)

Команда создает CMake-цель для генерации .idl.h-файлов для одного или нескольких заданных IDL-файлов при помощи компилятора NK.

Параметры:

  • NAME – имя CMake-цели для сборки .idl.h-файлов. Если цель еще не создана, то она будет создана с помощью add_library() с указанным именем. Обязательный параметр.
  • NOINSTALL – если указана эта опция, то файлы будут только сгенерированы в рабочей директории, но не будут установлены в глобальные директории: ${CMAKE_BINARY_DIR}/_headers_ ${CMAKE_BINARY_DIR}/_headers_/${PROJECT_NAME}.
  • NK_MODULE – в этом параметре необходимо указать имя пакета, исключив из него имя IDL-файла. Например, если в IDL-описании имя пакета задано как kl.core.NameServer, то в параметре NK_MODULE необходимо передать значение kl.core.
  • WORKING_DIRECTORY – рабочая директория для вызова компилятора NK, по умолчанию: ${CMAKE_CURRENT_BINARY_DIR}.
  • DEPENDS – дополнительные цели сборки, от которых зависит IDL-файл.

    Для добавления нескольких целей нужно использовать несколько параметров DEPENDS.

  • IDL – путь к IDL-файлу, для которого генерируется idl.h-файл. Обязательный параметр.

    Для добавления нескольких IDL-файлов нужно использовать несколько параметров IDL.

    Если один IDL-файл импортирует другой IDL-файл, то генерацию idl.h-файлов нужно производить в порядке, необходимом для соблюдения зависимостей (сначала самые вложенные).

  • NK_FLAGS – дополнительные флаги для NK компилятора.

Пример вызова:

nk_build_idl_files (echo_idl_files NK_MODULE "echo" IDL "resources/Ping.idl")

Пример использования команды см. в статье "Файлы CMakeLists.txt для сборки прикладных программ".

В начало
[Topic cmake_build_idl]

nk_build_cdl_files()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>toolchain/share/cmake/Modules/platform/nk2.cmake.

nk_build_cdl_files(NAME ...)

Команда создает CMake-цель для генерации .cdl.h-файлов для одного или нескольких заданных CDL-файлов при помощи компилятора NK.

Параметры:

  • NAME – имя CMake-цели для сборки .cdl.h-файлов. Если цель еще не создана, то она будет создана с помощью add_library() с указанным именем. Обязательный параметр.
  • NOINSTALL – если указана эта опция, то файлы будут только сгенерированы в рабочей директории, но не установлены в глобальные директории: ${CMAKE_BINARY_DIR}/_headers_ ${CMAKE_BINARY_DIR}/_headers_/${PROJECT_NAME}.
  • IDL_TARGET – цель сборки .idl.h-файлов для IDL-файлов, содержащих описания служб, предоставляемых компонентами, описанными в CDL-файлах.
  • NK_MODULE – в этом параметре необходимо указать имя компонента, исключив из него имя CDL-файла. Например, если в CDL-описании имя компонента задано как kl.core.NameServer, то в параметре NK_MODULE необходимо передать значение kl.core.
  • WORKING_DIRECTORY – рабочая директория для вызова компилятора NK, по умолчанию: ${CMAKE_CURRENT_BINARY_DIR}.
  • DEPENDS – дополнительные цели сборки, от которых зависит CDL-файл.

    Для добавления нескольких целей нужно использовать несколько параметров DEPENDS.

  • CDL – путь к CDL-файлу, для которого генерируется .cdl.h-файл. Обязательный параметр.

    Для добавления нескольких CDL-файлов нужно использовать несколько параметров CDL.

  • NK_FLAGS – дополнительные флаги для NK компилятора.

Пример вызова:

nk_build_cdl_files (echo_cdl_files IDL_TARGET echo_idl_files NK_MODULE "echo" CDL "resources/Ping.cdl")

Пример использования команды см. в статье "Файлы CMakeLists.txt для сборки прикладных программ".

В начало
[Topic cmake_build_cdl]

nk_build_edl_files()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>toolchain/share/cmake/Modules/platform/nk2.cmake.

nk_build_edl_files(NAME ...)

Команда создает CMake-цель для генерации .edl.h-файла для одного заданного EDL-файла при помощи компилятора NK.

Параметры:

  • NAME – имя CMake-цели сборки .edl.h-файла. Если цель еще не создана, то она будет создана с помощью add_library() с указанным именем. Обязательный параметр.
  • NOINSTALL – если указана эта опция, то файлы будут только сгенерированы в рабочей директории, но не установлены в глобальные директории: ${CMAKE_BINARY_DIR}/_headers_ ${CMAKE_BINARY_DIR}/_headers_/${PROJECT_NAME}.
  • CDL_TARGET – цель сборки .cdl.h-файлов для CDL-файлов, содержащих описания компонентов EDL-файла, для которого выполняется сборка.
  • IDL_TARGET – цель сборки .idl.h-файлов для IDL-файлов, содержащих описания интерфейсов EDL-файла, для которого выполняется сборка.
  • NK_MODULE – в этом параметре необходимо указать имя класса процессов, исключив из него имя EDL-файла. Например, если в EDL-описании имя класса процессов задано как kl.core.NameServer, то в параметре NK_MODULE необходимо передать значение kl.core.
  • WORKING_DIRECTORY – рабочая директория для вызова компилятора NK, по умолчанию: ${CMAKE_CURRENT_BINARY_DIR}.
  • DEPENDS – дополнительные цели сборки, от которых зависит EDL-файл.

    Для добавления нескольких целей нужно использовать несколько параметров DEPENDS.

  • EDL – путь к EDL файлу, для которого генерируется edl.h-файл. Обязательный параметр.
  • NK_FLAGS – дополнительные флаги для NK компилятора.

Примеры вызова:

nk_build_edl_files (echo_server_edl_files CDL_TARGET echo_cdl_files NK_MODULE "echo" EDL "resources/Server.edl") nk_build_edl_files (echo_client_edl_files NK_MODULE "echo" EDL "resources/Client.edl")

Пример использования команды см. в статье "Файлы CMakeLists.txt для сборки прикладных программ".

В начало
[Topic cmake_build_edl]

Генерация транспортного кода для разработки на языке C++

Для генерации транспортных прокси-объектов и стабов с помощью генератора nkppmeta при сборке решения используются CMake-команды add_nk_idl(), add_nk_cdl() и add_nk_edl().

В этом разделе

add_nk_idl()

add_nk_cdl()

add_nk_edl()

В начало
[Topic cmake_cpp]

add_nk_idl()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>/toolchain/share/cmake/Modules/platform/nk2.cmake.

add_nk_idl(NAME IDL_FILE ...)

Команда создает CMake-цель для генерации заголовочного файла *.idl.cpp.h для заданного IDL-файла при помощи компилятора nkppmeta. Также команда создает библиотеку, содержащую транспортный код для заданного интерфейса. Для компоновки с этой библиотекой необходимо использовать команду bind_nk_targets().

Генерируемые заголовочные файлы содержат представление на языке C++ для интерфейса и типов данных, описанных в IDL-файле, а также методы, необходимые для использования прокси-объектов и стабов.

Параметры:

  • NAME – имя CMake-цели. Обязательный параметр.
  • IDL_FILE – путь к IDL-файлу. Обязательный параметр.
  • NK_MODULE – в этом параметре необходимо указать имя пакета, исключив из него имя IDL-файла. Например, если в IDL-описании имя пакета задано как kl.core.NameServer, то в параметре NK_MODULE необходимо передать значение kl.core.
  • LANG – в этом параметре необходимо указать значение CXX.

Пример вызова:

add_nk_idl (ANIMAL_IDL "${CMAKE_SOURCE_DIR}/resources/Animal.idl" NK_MODULE "example" LANG "CXX")
В начало
[Topic add_nk_idl]

add_nk_cdl()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>/toolchain/share/cmake/Modules/platform/nk2.cmake.

add_nk_cdl(NAME CDL_FILE ...)

Команда создает CMake-цель для генерации файла *.cdl.cpp.h для заданного CDL-файла при помощи компилятора nkppmeta. Команда также создает библиотеку, содержащую транспортный код для заданного компонента. Для компоновки с этой библиотекой необходимо использовать команду bind_nk_targets().

Файл *.cdl.cpp.h содержит дерево вложенных компонентов и служб, предоставляемых компонентом, описанным в CDL-файле.

Параметры:

  • NAME – имя CMake-цели. Обязательный параметр.
  • CDL_FILE – путь к CDL-файлу. Обязательный параметр.
  • NK_MODULE – в этом параметре необходимо указать имя компонента, исключив из него имя CDL-файла. Например, если в CDL-описании имя компонента задано как kl.core.NameServer, то в параметре NK_MODULE необходимо передать значение kl.core.
  • LANG – в этом параметре необходимо указать значение CXX.

Пример вызова:

add_nk_cdl (CAT_CDL "${CMAKE_SOURCE_DIR}/resources/Cat.cdl" NK_MODULE "example" LANG "CXX")
В начало
[Topic add_nk_cdl]

add_nk_edl()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>/toolchain/share/cmake/Modules/platform/nk2.cmake.

add_nk_edl(NAME EDL_FILE ...)

Команда создает CMake-цель для генерации файла *.edl.cpp.h для заданного EDL-файла при помощи компилятора nkppmeta. Также команда создает библиотеку, содержащую транспортный код для серверной или клиентской программы. Для компоновки с этой библиотекой необходимо использовать команду bind_nk_targets().

Файл *.edl.cpp.h содержит дерево вложенных компонентов и служб, предоставляемых классом процессов, описанным в EDL-файле.

Параметры:

  • NAME – имя CMake-цели. Обязательный параметр.
  • EDL_FILE – путь к EDL-файлу. Обязательный параметр.
  • NK_MODULE – в этом параметре необходимо указать имя класса процессов, исключив из него имя EDL-файла. Например, если в EDL-описании имя класса процессов задано как kl.core.NameServer, то в параметре NK_MODULE необходимо передать значение kl.core.
  • LANG – в этом параметре необходимо указать значение CXX.

Пример вызова:

add_nk_edl (SERVER_EDL "${CMAKE_SOURCE_DIR}/resources/Server.edl" NK_MODULE "example" LANG "CXX")
В начало
[Topic add_nk_edl]

Библиотека image

Этот раздел содержит описание команд и макросов CMake-библиотеки image , входящей в состав KasperskyOS Community Edition и содержащей скрипты сборки образа решения.

В этом разделе

build_kos_qemu_image()

build_kos_hw_image()

В начало
[Topic cmake_image_lib]

build_kos_qemu_image()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>toolchain/share/cmake/Modules/platform/image.cmake.

build_kos_qemu_image(NAME ...)

Команда создает CMake-цель сборки образа решения для QEMU.

Параметры:

  • NAME – имя CMake-цели для сборки образа решения. Обязательный параметр.
  • PERFCNT_KERNEL – использовать ядро со счетчиками производительности, если оно доступно в составе KasperskyOS Community Edition.
  • EINIT_ENTITY – имя исполняемого файла, из которого будет запускаться программа Einit.
  • EXTRA_XDL_DIR – дополнительные директории для включения при сборке программы Einit.
  • CONNECTIONS_CFG – путь до файла init.yaml или шаблона init.yaml.in.
  • SECURITY_PSL – путь до файла security.psl или шаблона security.psl.in.
  • KLOG_ENTITY – цель сборки системной программы Klog, отвечающей за аудит безопасности. Если цель не указана – аудит не выполняется.
  • QEMU_FLAGS – дополнительные флаги для запуска QEMU.
  • IMAGE_BINARY_DIR_BIN – директория для финального образа и других артефактов, по умолчанию совпадает с CMAKE_CURRENT_BINARY_DIR.
  • NO_AUTO_BLOB_CONTAINER – не включать в образ решения программу BlobContainer, необходимую для работы с динамическими библиотеками в разделяемой памяти. Подробнее см. "Включение системной программы BlobContainer в решение на базе KasperskyOS".
  • PACK_DEPS, PACK_DEPS_COPY_ONLY, PACK_DEPS_LIBS_PATH, PACK_DEPS_COPY_TARGET – параметры, задающие способ добавления динамических библиотек в образ решения.
  • IMAGE_FILES – исполняемые файлы прикладных и системных программ (кроме программы Einit) и любые другие файлы для добавления в образ ROMFS.

    Для добавления нескольких программ или файлов можно использовать несколько параметров IMAGE_FILES.

  • <пути до файлов> – свободные параметры, тоже что IMAGE_FILES.

Пример вызова:

build_kos_qemu_image ( kos-qemu-image EINIT_ENTITY EinitQemu CONNECTIONS_CFG "src/init.yaml.in" SECURITY_CFG "src/security.cfg.in" IMAGE_FILES ${ENTITIES})

Пример использования команды см. в статье "Файлы CMakeLists.txt для сборки программы Einit".

В начало
[Topic cmake_build_qemu]

build_kos_hw_image()

Команда объявлена в файле /opt/KasperskyOS-Community-Edition-<version>toolchain/share/cmake/Modules/platform/image.cmake.

build_kos_hw_image(NAME ...)

Команда создает CMake-цель сборки образа решения для аппаратной платформы.

Параметры:

  • NAME – имя CMake-цели для сборки образа решения. Обязательный параметр.
  • PERFCNT_KERNEL – использовать ядро со счетчиками производительности, если оно доступно в составе KasperskyOS Community Edition.
  • EINIT_ENTITY – имя исполняемого файла, из которого будет запускаться программа Einit.
  • EXTRA_XDL_DIR – дополнительные директории для включения при сборке программы Einit.
  • CONNECTIONS_CFG – путь до файла init.yaml или шаблона init.yaml.in.
  • SECURITY_PSL – путь до файла security.psl или шаблона security.psl.in.
  • KLOG_ENTITY – цель сборки системной программы Klog, отвечающей за аудит безопасности. Если цель не указана – аудит не выполняется.
  • IMAGE_BINARY_DIR_BIN – директория для финального образа и других артефактов, по умолчанию CMAKE_CURRENT_BINARY_DIR.
  • NO_AUTO_BLOB_CONTAINER – не включать в образ решения программу BlobContainer, необходимую для работы с динамическими библиотеками в разделяемой памяти. Подробнее см. "Включение системной программы BlobContainer в решение на базе KasperskyOS".
  • PACK_DEPS, PACK_DEPS_COPY_ONLY, PACK_DEPS_LIBS_PATH, PACK_DEPS_COPY_TARGET – параметры, задающие способ добавления динамических библиотек в образ решения.
  • IMAGE_FILES – исполняемые файлы прикладных и системных программ (кроме программы Einit) и любые другие файлы для добавления в образ ROMFS.

    Для добавления нескольких программ или файлов можно использовать несколько параметров IMAGE_FILES.

  • <пути до файлов> – свободные параметры, тоже что IMAGE_FILES.

Пример вызова:

build_kos_hw_image ( kos-image EINIT_ENTITY EinitHw CONNECTIONS_CFG "src/init.yaml.in" SECURITY_CFG "src/security.cfg.in" IMAGE_FILES ${ENTITIES})

Пример использования команды см. в статье "Файлы CMakeLists.txt для сборки программы Einit".

В начало
[Topic cmake_build_hw]