Сборка динамических библиотек
Чтобы выполнить сборку динамической библиотеки, нужно использовать следующую CMake-команду:
add_library (<имя цели сборки библиотеки> SHARED <путь к файлу исходного кода библиотеки>...)
Также можно выполнить сборку динамической библиотеки следующей CMake-командой:
add_library (<имя цели сборки библиотеки> <путь к файлу исходного кода библиотеки>...)
При этом CMake-переменная BUILD_SHARED_LIBS должна иметь значение "истина", иначе будет выполнена сборка статической библиотеки.
По умолчанию имя файла библиотеки совпадает с именем цели сборки этой библиотеки, заданным через параметр 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)