Библиотека 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). Подробнее о политике предоставления данных см. "Предоставление данных".- По умолчанию, если тулчейн в составе KasperskyOS SDK поддерживает динамическую компоновку, то команда
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:NOSTANDARD_C99
Используется стандарт ISO C99.
Для компилятора C значение преобразуется в параметр:
-std=c99.Стандарт ISO C99 не используется.
STANDARD_C99:NOSTANDARD_GNU_C99
Используется стандарт ISO C99 с расширениями GNU.
Для компилятора C значение преобразуется в параметр:
-std=gnu99.Стандарт ISO C99 с расширениями GNU не используется.
STANDARD_GNU_C99:NOSTANDARD_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:NOSTANDARD_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:NOSTANDARD_14
Используется стандарт 2014 ISO C++.
Для компилятора C++ значение преобразуется в параметр
-std=c++14.Стандарт 2014 ISO C++ не используется.
STANDARD_14:NOSTANDARD_GNU_14
Используется стандарт 2014 ISO C++ с расширениями GNU.
Для компилятора C++ значение преобразуется в параметр
-std=gnu++14.Стандарт 2014 ISO C++ с расширениями GNU не используется.
STANDARD_GNU_14:NOSTANDARD_17
Используются стандарты ISO C17 и 2017 ISO C++.
Для C-компилятора значение преобразуется в параметр
-std=c17.Для компилятора C++ значение преобразуется в параметр
-std=c++17.Стандарты ISO C17 и 2017 ISO C++ не используются.
STANDARD_17:NOSTANDARD_GNU_17
Используются стандарты ISO C17 и 2017 ISO C++ с расширениями GNU.
Для C-компилятора значение преобразуется в параметр
-std=gnu17.Для компилятора C++ значение преобразуется в параметр
-std=gnu++17.Стандарты ISO C17 и 2017 ISO C++ с расширениями GNU не используются.
STANDARD_GNU_17:NOSTRICT_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 и прикладных программ.