Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 512новых вакансий за сутки·54 396вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 565
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 395 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 752
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 322
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 238
  • Backend вакансии1 196
  • AI вакансии549
  • Fullstack вакансии500
  • Frontend вакансии426
  • Mobile вакансии28

По стеку

  • Go5 209
  • Java3 131
  • Kotlin1 113
  • Node.js1 008
  • Rust833
  • .NET656
  • PHP322
  • C++270
  • C#207

DevOps и инфраструктура

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 655
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD919
  • SRE308
  • Кибербезопасность38

Аналитика и данные

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн67
  • Ручное тестирование14

По регионам

  • Вакансии в США25 642
  • Вакансии в Европе10 259
  • Работа в России3 639
  • Вакансии в Канаде2 255

По формату

  • Удалённые вакансии42 339
  • Релокация в США25 642
  • Гибридная работа5 706
  • Офисная работа4 402

По уровню

  • Senior вакансии22 510
  • Middle вакансии11 429
  • Junior вакансии3 877

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis42 вакансии
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме CMakeВсе вопросы
CMakeMiddleТеория

Как находить и использовать внешние библиотеки с помощью find_package()?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

find_package() ищет библиотеку в Config- или Module-режиме; современный подход — использовать imported targets (OpenSSL::SSL, fmt::fmt), которые автоматически тянут include-пути и транзитивные зависимости через target_link_libraries().

Базовый синтаксис

find_package(OpenSSL REQUIRED)
find_package(Boost 1.80 REQUIRED COMPONENTS filesystem system)
find_package(fmt 9.0 QUIET)
  • REQUIRED — прерывает конфигурацию с ошибкой, если пакет не найден.
  • QUIET — подавляет диагностические сообщения об отсутствии пакета.
  • COMPONENTS — выбирает конкретные компоненты (Boost, Qt и др. поддерживают это).
  • Версионный аргумент задаёт минимально допустимую версию.

Механизм find_package()

find_package() — основной способ подключить стороннюю библиотеку в CMake-проекте. Команда работает в двух режимах: Module mode (ищет файл Find<PackageName>.cmake в CMAKE_MODULE_PATH) и Config mode (ищет <PackageName>Config.cmake или <package-name>-config.cmake, которые устанавливает сама библиотека).

Что происходит после успешного поиска

CMake устанавливает переменные вида <Package>_FOUND, <Package>_INCLUDE_DIRS, <Package>_LIBRARIES (устаревший стиль) и создаёт imported targets — предпочтительный современный способ:

find_package(OpenSSL REQUIRED)
target_link_libraries(my_app PRIVATE OpenSSL::SSL OpenSSL::Crypto)

find_package(fmt REQUIRED)
target_link_libraries(my_app PRIVATE fmt::fmt)

Imported target автоматически тянет include-пути, compile definitions и транзитивные зависимости — ничего указывать вручную не нужно.

Config mode: как CMake ищет файл конфигурации

Порядок поиска определяется переменными:

  • CMAKE_PREFIX_PATH — список корней, в которых CMake ищет lib/cmake/<Name>, share/cmake/<Name> и т.д.
  • <Package>_DIR — явно задаёт каталог с конфигурационным файлом.
  • Переменная окружения <Package>_ROOT (CMake 3.12+).
  • Системные пути вроде /usr/lib/cmake, /usr/local/lib/cmake.
# Передача при вызове cmake
cmake -B build -DCMAKE_PREFIX_PATH=/opt/mylibs
# Или несколько корней
cmake -B build -DCMAKE_PREFIX_PATH="/opt/lib1;/opt/lib2"

Module mode: написание собственного FindXxx.cmake

Когда библиотека не поставляет Config-файл (старые системные библиотеки), пишут модуль вручную:

# cmake/FindMyLib.cmake
find_path(MyLib_INCLUDE_DIR mylib.h
  HINTS ${MYLIB_ROOT}/include /usr/local/include)

find_library(MyLib_LIBRARY
  NAMES mylib mylib_static
  HINTS ${MYLIB_ROOT}/lib /usr/local/lib)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MyLib
  REQUIRED_VARS MyLib_LIBRARY MyLib_INCLUDE_DIR)

if(MyLib_FOUND AND NOT TARGET MyLib::MyLib)
  add_library(MyLib::MyLib UNKNOWN IMPORTED)
  set_target_properties(MyLib::MyLib PROPERTIES
    IMPORTED_LOCATION "${MyLib_LIBRARY}"
    INTERFACE_INCLUDE_DIRECTORIES "${MyLib_INCLUDE_DIR}")
endif()

Подключить модуль в проект:

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
find_package(MyLib REQUIRED)
target_link_libraries(my_app PRIVATE MyLib::MyLib)

Интеграция с пакетными менеджерами

vcpkg и Conan генерируют Config-файлы автоматически. При использовании vcpkg достаточно передать toolchain:

cmake -B build -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake

После этого find_package(fmt REQUIRED) найдёт библиотеку из vcpkg без дополнительных настроек.

Подводные камни

  • Смешение старого и нового стиля. Использование ${Package_INCLUDE_DIRS} вместо imported targets ломает транзитивные зависимости и приводит к ошибкам линковки в подпроектах.
  • Разные имена пакета и target. find_package(OpenCV), но цель называется opencv_core, не OpenCV::core — нужно читать документацию конкретного пакета.
  • Кешированные переменные. После смены CMAKE_PREFIX_PATH старые значения <Package>_DIR остаются в CMakeCache.txt. Решение: удалить кеш или передать -U <Package>_DIR.
  • Конфликт Module vs Config mode. Если в проекте есть собственный FindOpenSSL.cmake, а система предоставляет OpenSSLConfig.cmake, CMake выберет Module mode и может найти не ту версию.
  • QUIET скрывает реальные ошибки. Пакет найден, но с неверными путями — диагностика отключена QUIET, приложение падает при запуске.
  • COMPONENTS не обязательно проверяются. Не все пакеты валидируют COMPONENTS; ошибка компиляции возникает позже — труднее диагностировать.
  • Разрядность и конфигурация. На Windows Debug/Release библиотеки лежат в разных каталогах; без правильного CMAKE_BUILD_TYPE и multi-config генераторов линкуется не та версия.
  • Виртуальные окружения Python/Conda. При сборке проектов, использующих find_package(Python3), CMake может найти системный Python вместо окружения, если Python3_ROOT_DIR не задан явно.

Частые вопросы на собеседовании

  • В чём разница между target_include_directories() и include_directories()?
  • Каковы лучшие практики современного CMake (подход на основе таргетов)?
  • В чём разница между PRIVATE, PUBLIC и INTERFACE в свойствах таргетов CMake?
  • В каких проектах CMake оправдан, а где он становится источником лишней сложности?

Типичные ошибки

  • Объяснять find_package и внешние библиотеки только по синтаксису, без жизненного цикла и стоимости.
  • Игнорировать ошибки, null/empty состояния, порядок инициализации или режим сборки.
  • Давать пример, который работает в демо, но ломается при изменении владельца ресурса.
  • Трактовать CMake как shell-скрипт вместо описания графа таргетов.

Что проверяет интервьюер

  • Кандидат формулирует точную модель для find_package и внешние библиотеки, а не только определение.
  • Пример компилируем, безопасен по lifetime и соответствует версии технологии.
  • Названы trade-off, ограничения и диагностируемые симптомы ошибки.
  • Разделяет configure/generate/build и использует target-based подход.

Как вы знаете этот вопрос?

Проверить себя по теме CMake →

Источники

  • https://cmake.org/cmake/help/latest/command/find_package.html
←Предыдущий вопросКак сравнить CMake с альтернативами по надёжности, скорости разработки, portability, performance и operational cost?Следующий вопрос→Какую инженерную проблему CMake решает в build/runtime/systems-разработке, если не сводить ответ к определению?

Связанные темы

CMakebuild-systemsdependency-managementrelease-engineering