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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

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

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

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

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

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

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

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Что такое cache variables в CMake и как их определять и использовать?

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

Cache-переменные CMake хранятся в CMakeCache.txt, переживают перезапуск конфигурации и задаются через set(VAR value CACHE TYPE docstring) или option(); пользователь может переопределить их флагом -D при вызове cmake.

Объявление cache-переменных

Синтаксис команды set с ключевым словом CACHE:

set(<variable> <value> CACHE <type> <docstring> [FORCE])

Типы переменных:

  • BOOL — логическое значение (ON/OFF)
  • STRING — произвольная строка
  • FILEPATH — путь к файлу
  • PATH — путь к директории
  • INTERNAL — скрыто в GUI, используется самим CMake

Что такое cache-переменные в CMake

Cache-переменные — это переменные, которые CMake сохраняет в файле CMakeCache.txt в директории сборки. В отличие от обычных переменных, которые существуют только во время выполнения скрипта, cache-переменные переживают перезапуск cmake и доступны пользователю для изменения через cmake-gui, ccmake или флаг -D.

Практические примеры

# Флаг включения тестов — пользователь может переопределить через -D
set(BUILD_TESTS ON CACHE BOOL "Build unit tests")

# Путь к внешней библиотеке
set(OPENSSL_ROOT_DIR "" CACHE PATH "Path to OpenSSL root directory")

# Выбор бэкенда рендеринга
set(RENDERER "vulkan" CACHE STRING "Renderer backend (vulkan/opengl/metal)")
set_property(CACHE RENDERER PROPERTY STRINGS vulkan opengl metal)

# Принудительная перезапись даже если пользователь уже изменил значение
set(INTERNAL_VERSION "1.2.3" CACHE STRING "" FORCE)

Использование cache-переменных из командной строки

# Установка при первом configure
cmake -S . -B build -DBUILD_TESTS=OFF -DOPENSSL_ROOT_DIR=/usr/local/ssl

# Изменение уже закешированного значения
cmake -S . -B build -DRENDERER=opengl

# Просмотр всех cache-переменных
cmake -L build/        # только пользовательские
cmake -LA build/       # включая ADVANCED
cmake -LAH build/      # с docstring

Разница между обычной переменной и cache-переменной

# Обычная переменная — локальная, не сохраняется между запусками cmake
set(MY_LOCAL "hello")

# Cache-переменная — сохраняется в CMakeCache.txt
set(MY_CACHED "hello" CACHE STRING "Cached value")

# ВАЖНО: обычная переменная перекрывает cache-переменную того же имени
set(MY_CACHED "override")  # теперь ${MY_CACHED} == "override", cache не тронут
unset(MY_CACHED)             # после этого ${MY_CACHED} снова берётся из cache

Опция option() как синтаксический сахар для BOOL cache-переменных

# Эквивалентно set(ENABLE_ASAN OFF CACHE BOOL "Enable AddressSanitizer")
option(ENABLE_ASAN "Enable AddressSanitizer" OFF)

if(ENABLE_ASAN)
  target_compile_options(myapp PRIVATE -fsanitize=address)
  target_link_options(myapp PRIVATE -fsanitize=address)
endif()

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

  • Stale cache после изменения CMakeLists.txt: если переименовали переменную, старое значение остаётся в CMakeCache.txt и сбивает с толку. Решение: удалить build/CMakeCache.txt или всю директорию сборки.
  • FORCE не обновляет значение в GUI немедленно: FORCE перезаписывает cache на диске, но cmake-gui может показывать старое значение до перезагрузки.
  • Порядок приоритетов: обычная переменная в текущем scope перекрывает cache-переменную того же имени — это неочевидный источник багов.
  • INTERNAL-переменные не видны в GUI: использование типа INTERNAL для скрытия «служебных» значений — осознанное решение, но может запутать при отладке.
  • Документирующая строка обязательна: пустой docstring ("") — плохая практика, особенно для публичного проекта; cmake-gui показывает его как подсказку.
  • Multi-config генераторы игнорируют CMAKE_BUILD_TYPE: при использовании Ninja Multi-Config или Visual Studio cache-переменная CMAKE_BUILD_TYPE не работает — нужен --config Release при сборке.
  • set_property STRINGS: без него cmake-gui показывает STRING-переменную как свободный ввод, а не как выпадающий список — пользователь может ввести некорректное значение.

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

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

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

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

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

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

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

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

Источники

  • https://cmake.org/cmake/help/latest/guide/tutorial/Configuration%20and%20Cache%20Variables.html
←Предыдущий вопросКак устанавливать флаги компилятора в современном CMake?Следующий вопрос→В чём разница между `cmake`, `cmake --build` и `make`?

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

CMakebuild-systemsdependency-managementrelease-engineering