Демистифицируем CMake: отключение библиотечных префиксов

CMake — ​​широко используемый генератор систем сборки, который помогает автоматизировать процесс сборки программных проектов. По умолчанию CMake добавляет префикс к именам генерируемых им библиотек. Однако существуют сценарии, в которых вам может потребоваться отключить префикс библиотеки, чтобы иметь больший контроль над соглашениями об именах. В этой статье мы рассмотрим несколько способов отключения префикса библиотеки CMake и предоставим примеры кода для иллюстрации каждого подхода.

Метод 1: изменение переменной CMAKE_SHARED_LIBRARY_PREFIX
CMake предоставляет переменную CMAKE_SHARED_LIBRARY_PREFIX, которая определяет префикс для общих библиотек. Изменяя эту переменную, мы можем отключить префикс библиотеки. Вот пример:

set(CMAKE_SHARED_LIBRARY_PREFIX "")

Метод 2: использование целевого свойства NO_SONAME
CMake позволяет установить целевое свойство NO_SONAME, которое предотвращает добавление префикса библиотеки во время процесса сборки. Вот пример:

add_library(mylib SHARED mylib.cpp)
set_property(TARGET mylib PROPERTY NO_SONAME 1)

Метод 3: настройка именования библиотеки с помощью целевого свойства OUTPUT_NAME
CMake предоставляет целевое свойство OUTPUT_NAME, которое позволяет указать собственное имя для библиотеки. Установив это свойство, вы можете эффективно отключить префикс библиотеки. Вот пример:

add_library(mylib SHARED mylib.cpp)
set_property(TARGET mylib PROPERTY OUTPUT_NAME "mylib")

Метод 4: использование свойств каталога ARCHIVE_OUTPUT_NAME и LIBRARY_OUTPUT_NAME
CMake позволяет настраивать выходные имена для библиотек с помощью свойств каталога ARCHIVE_OUTPUT_NAME и LIBRARY_OUTPUT_NAME. Установив эти свойства, вы можете отключить префикс библиотеки для всех библиотек в определенном каталоге. Вот пример:

set_directory_properties(PROPERTIES ARCHIVE_OUTPUT_NAME "lib")
set_directory_properties(PROPERTIES LIBRARY_OUTPUT_NAME "lib")

В этой статье мы рассмотрели несколько способов отключения префикса библиотеки CMake. Используя эти подходы, вы можете лучше контролировать соглашения об именах библиотек, создаваемых CMake. Независимо от того, решите ли вы изменить переменные, установить целевые свойства или настроить выходные имена, CMake обеспечивает гибкость для удовлетворения конкретных требований вашего проекта.