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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python13 614
  • Облачные технологии9 925
  • QA вакансии3 157
  • Android1 675
  • Инженер данных1 071
  • Продакт-менеджер317

Разработка

  • iOS1 558
  • Backend вакансии1 462
  • AI вакансии743
  • Fullstack вакансии576
  • Frontend вакансии495
  • Mobile вакансии28

По стеку

  • Go7 718
  • Java4 674
  • Node.js1 474
  • Kotlin1 310
  • Rust1 275
  • .NET1 098
  • PHP474
  • C++314
  • C#210

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

  • Kubernetes5 760
  • Linux-инфраструктура4 462
  • DevOps вакансии3 927
  • Terraform / IaC3 213
  • Мониторинг и Observability1 531
  • CI/CD932
  • SRE416
  • Кибербезопасность29

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

  • Аналитик данных611
  • Бизнес-аналитик534
  • Data Scientist444
  • Системный аналитик80

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

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

По регионам

  • Вакансии в США31 393
  • Вакансии в Европе11 635
  • Работа в России3 672
  • Вакансии в Канаде2 524

По формату

  • Удалённые вакансии47 029
  • Релокация в США31 393
  • Гибридная работа8 379
  • Офисная работа5 670

По уровню

  • Senior вакансии25 431
  • Middle вакансии11 844
  • Junior вакансии4 210

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

В чём разница между in-source build и out-of-source build? Какой предпочтителен и почему?

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

In-source build создаёт все артефакты рядом с исходниками (cmake .), что засоряет репозиторий. Out-of-source (cmake -S . -B build) изолирует генерируемые файлы в отдельную директорию, упрощает .gitignore и позволяет держать несколько конфигураций параллельно.

In-source build

In-source сборка происходит, когда build-директория совпадает с директорией исходного кода. Пользователь запускает cmake . прямо в корне проекта.

# In-source: НЕ рекомендуется
cd /my/project
cmake .        # CMakeCache.txt, CMakeFiles/, Makefile появятся рядом с исходниками
make

После этого директория проекта выглядит так:

/my/project/
  CMakeLists.txt
  CMakeCache.txt      # сгенерировано
  CMakeFiles/         # сгенерировано
  Makefile            # сгенерировано
  src/
  include/

In-source и out-of-source сборка

Out-of-source build

Out-of-source сборка помещает все генерируемые файлы в отдельную директорию, не затрагивая исходники.

# Out-of-source: правильный подход
cmake -S . -B build
cmake --build build

# Или классический вариант
mkdir build && cd build && cmake .. && make

Структура директорий:

/my/project/
  CMakeLists.txt
  src/
  include/
  build/              # только генерируемые файлы
    CMakeCache.txt
    CMakeFiles/
    Makefile
    myapp

Почему out-of-source предпочтителен

  • Чистый git status: все генерируемые файлы находятся в build/, который легко добавить в .gitignore одной строкой. При in-source придётся перечислять каждый генерируемый файл.
  • Несколько конфигураций одновременно: можно держать Debug, Release и Sanitizers в разных build-директориях параллельно.
  • Простая очистка: rm -rf build/ удаляет всё сгенерированное, не затрагивая исходники. В in-source нужно вручную удалять отдельные файлы.
  • Безопасность: нет риска случайно перезаписать исходный файл генерируемым артефактом с тем же именем.
# Несколько конфигураций одновременно
cmake -S . -B build/debug   -DCMAKE_BUILD_TYPE=Debug
cmake -S . -B build/release -DCMAKE_BUILD_TYPE=Release
cmake -S . -B build/asan    -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fsanitize=address"

# Сборка каждой независимо
cmake --build build/debug
cmake --build build/release

Защита от in-source сборок

Можно явно запретить in-source сборку в CMakeLists.txt:

cmake_minimum_required(VERSION 3.21)
project(MyProject)

# Запрет in-source сборки
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
  message(FATAL_ERROR
    "In-source builds are not allowed. "
    "Please create a separate build directory: cmake -S . -B build"
  )
endif()

.gitignore для out-of-source

# .gitignore
build/
# Если используете разные директории
build-*/

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

  • Кеш остаётся после in-source: если проект уже был скомпилирован in-source, CMakeCache.txt остаётся и мешает при переходе на out-of-source. Нужно вручную удалить все CMake-артефакты из корня.
  • IDE может создавать in-source: некоторые IDE (старые версии CLion, Eclipse CDT) по умолчанию конфигурируют in-source сборку.
  • CMAKE_SOURCE_DIR vs CMAKE_CURRENT_SOURCE_DIR: в multi-directory проектах эти переменные отличаются — использование неправильной переменной даёт некорректный путь.
  • Relative paths в custom commands: команды с относительными путями могут ломаться при out-of-source, если не использовать CMAKE_CURRENT_SOURCE_DIR.
  • FetchContent всегда out-of-source: зависимости FetchContent помещаются в build/, независимо от типа сборки основного проекта.

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

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

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

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

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

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

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

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

Источники

  • https://cmake.org/cmake/help/latest/manual/cmake.1.html
←Предыдущий вопросПредставьте, после изменения CMake сборка, runtime или интеграция стали нестабильными. Как вы будете расследовать проблему?Следующий вопрос→Какая mental model CMake важна для диагностики: lifecycle, graph, runtime, targets, protocol, threads или resources?

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

CMakebuild-systemsdependency-managementrelease-engineering