Сборка динамических библиотек

Чтобы выполнить сборку динамической библиотеки, нужно использовать следующую CMake-команду:

add_library(<имя цели сборки> SHARED <путь к файлу исходного кода библиотеки>...)

Также можно выполнить сборку динамической библиотеки следующей CMake-командой:

add_library(<имя цели сборки> <путь к файлу исходного кода библиотеки>...)

При этом shell-команду cmake нужно вызвать с параметром -D BUILD_SHARED_LIBS=YES. (Если вызвать shell-команду cmake без параметра -D BUILD_SHARED_LIBS=YES, будет выполнена сборка статической библиотеки.)

Пример:

#!/bin/bash

...

cmake -G "Unix Makefiles" \

-D CMAKE_BUILD_TYPE:STRING=Debug \

-D CMAKE_TOOLCHAIN_FILE=$SDK_PREFIX/toolchain/share/toolchain-$TARGET.cmake \

-D BUILD_SHARED_LIBS=YES \

-B build \

&& cmake --build build --target kos-image

По умолчанию имя файла библиотеки совпадает с именем цели сборки, заданным через параметр CMake-команды add_library(). Имя файла библиотеки можно изменить, используя CMake-команду set_target_properties(). Это можно использовать, чтобы имя файла библиотеки было одинаковым для ее динамического и статического варианта.

Пример:

# Сборка статической библиотеки

add_library(somelib_static STATIC src/somesrc.cpp)

set_target_properties(somelib_static PROPERTIES OUTPUT_NAME "somelib")

# Сборка динамической библиотеки

add_library(somelib_shared SHARED src/somesrc.cpp)

set_target_properties(somelib_shared PROPERTIES OUTPUT_NAME "somelib")

Динамическая библиотека может быть скомпонована с другими статическими и динамическими библиотеками CMake-командой target_link_libraries(). При этом статические библиотеки должны быть собраны с флагом -fPIC. Этот флаг применяется при сборке статической библиотеки, если используется следующая CMake-команда:

set_property(TARGET <имя цели сборки>... PROPERTY POSITION_INDEPENDENT_CODE ON)

В начало