Cmake используем внешние библиотеки (на примере OpenSSL)

Автор: | 8 февраля, 2026

Часто требуется использовать сторонние библиотеки. CMake умеет их искать.

Способ 1: find_package() (предпочтительный, если пакет поддерживает CMake)

Многие библиотеки поставляются с CMake-файлами поиска. Предположим, нам нужен OpenSSL для хеширования.

Упрощенный CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(UsingOpenSSL)

# Ищем пакет OpenSSL. REQUIRED означает, что ошибка будет, если пакет не найден.
find_package(OpenSSL REQUIRED)

# Сообщаем CMake, что для нашего исполняемого файла нужны include-пути и библиотеки от OpenSSL.
# Это современная альтернатива include_directories() и target_link_libraries() для внешних пакетов.
include_directories(${OPENSSL_INCLUDE_DIR})

add_executable(crypto_app src/main.cpp)
# Связываем с найденными библиотеками OpenSSL
target_link_libraries(crypto_app ${OPENSSL_LIBRARIES})

Содержимое src/main.cpp (упрощенно):

#include <openssl/sha.h>
#include <iostream>

int main() {
    // ... код работы с SHA ...
    std::cout << "Using OpenSSL!" << std::endl;
    return 0;
}

Способ 2: pkg-config (популярно в Linux/Unix)

Если find_package не сработал, можно использовать pkg-config.

cmake_minimum_required(VERSION 3.10)
project(UsingPkgConfig)

# Ищем утилиту pkg-config
find_package(PkgConfig REQUIRED)
# Просим pkg-config найти библиотеку openssl и создать импортированную цель
pkg_check_modules(OPENSSL REQUIRED openssl)

add_executable(crypto_app src/main.cpp)
# Используем свойства, найденные pkg-config
target_include_directories(crypto_app PUBLIC ${OPENSSL_INCLUDE_DIRS})
target_link_libraries(crypto_app ${OPENSSL_LIBRARIES})
target_compile_options(crypto_app PUBLIC ${OPENSSL_CFLAGS_OTHER})

Что делать, если библиотека не найдена?

  1. Установите библиотеку. Например:
    • Ubuntu/Debian: sudo apt install libssl-dev
    • Windows: использовать vcpkg, MSYS2 или установщик с сайта.
    • macOS: brew install openssl
  2. Иногда нужно указать CMake путь к библиотеке через переменную, например -DOPENSSL_ROOT_DIR=/путь/к/openssl при вызове cmake.

Вывод: Использование внешних библиотек через find_package или pkg_check_modules — стандартный и чистый способ. CMake берет на себя работу по поиску путей и настройке флагов компиляции и линковки.