Часто требуется использовать сторонние библиотеки. 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})
Что делать, если библиотека не найдена?
- Установите библиотеку. Например:
- Ubuntu/Debian:
sudo apt install libssl-dev - Windows: использовать vcpkg, MSYS2 или установщик с сайта.
- macOS:
brew install openssl
- Ubuntu/Debian:
- Иногда нужно указать CMake путь к библиотеке через переменную, например
-DOPENSSL_ROOT_DIR=/путь/к/opensslпри вызовеcmake.
Вывод: Использование внешних библиотек через find_package или pkg_check_modules — стандартный и чистый способ. CMake берет на себя работу по поиску путей и настройке флагов компиляции и линковки.
