Библиотека platform

21 мая 2024

ID cmake_platform_lib

Библиотека 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 и прикладных программ.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!