Библиотека platform
содержит следующие команды:
initialize_platform()
– команда для инициализации библиотеки platform
.Команда initialize_platform()
может вызываться с параметром FORCE_STATIC
, который включает принудительную статическую компоновку исполняемых файлов:
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, а также значения этих флагов приведены в таблице ниже.
Флаг компиляции |
Значение |
Значение |
Значение по умолчанию |
---|---|---|---|
STANDARD_ANSI |
Используются стандарты ISO C90 и 1998 ISO C++. Для компиляторов C и C++ значение преобразуется в параметр: |
Стандарты ISO C90 и 1998 ISO C++ не используются. |
|
STANDARD_C99 |
Используется стандарт ISO C99. Для компилятора C значение преобразуется в параметр: |
Стандарт ISO C99 не используется. |
|
STANDARD_GNU_C99 |
Используется стандарт ISO C99 с расширениями GNU. Для компилятора C значение преобразуется в параметр: |
Стандарт ISO C99 с расширениями GNU не используется. |
|
STANDARD_11 |
Используются стандарты ISO C11 и 2011 ISO C++. Для C-компилятора значение преобразуется в параметр Для компилятора C++ значение преобразуется в параметр |
Стандарты ISO C11 и 2011 ISO C++ не используются. |
|
STANDARD_GNU_11 |
Используются стандарты ISO C11 и 2011 ISO C++ с расширениями GNU. Для C-компилятора значение преобразуется в параметр Для компилятора C++ значение преобразуется в параметр |
Стандарты ISO C11 и 2011 ISO C++ с расширениями GNU не используются. |
|
STANDARD_14 |
Используется стандарт 2014 ISO C++. Для компилятора C++ значение преобразуется в параметр |
Стандарт 2014 ISO C++ не используется. |
|
STANDARD_GNU_14 |
Используется стандарт 2014 ISO C++ с расширениями GNU. Для компилятора C++ значение преобразуется в параметр |
Стандарт 2014 ISO C++ с расширениями GNU не используется. |
|
STANDARD_17 |
Используются стандарты ISO C17 и 2017 ISO C++. Для C-компилятора значение преобразуется в параметр Для компилятора C++ значение преобразуется в параметр |
Стандарты ISO C17 и 2017 ISO C++ не используются. |
|
STANDARD_GNU_17 |
Используются стандарты ISO C17 и 2017 ISO C++ с расширениями GNU. Для C-компилятора значение преобразуется в параметр Для компилятора C++ значение преобразуется в параметр |
Стандарты ISO C17 и 2017 ISO C++ с расширениями GNU не используются. |
|
STRICT_WARNINGS |
Включены предупреждения для обнаружения потенциальных проблем и ошибок в коде на языках C и C++. Для компиляторов C и C++ значение преобразуется в следующие параметры: Для компилятора C дополнительно используется параметр |
Предупреждения отключены. |
|
Если через параметры команды не заданы флаги компиляции вида 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 и прикладных программ.