CMake: вопросы на собеседовании
Вопросы и ответы по CMake: подготовка, примеры и типичные ошибки.
Проверьте себя по CMake: 5 вопросов, ~10 минут
Вопросов: 39. Частые идут первыми, сложные возвращаются на повторение.
- В каких проектах CMake оправдан, а где он становится источником лишней сложности?Middle· спрашивают почти всегда· полный разбор — Jobs/Boost
- Что такое файл
CMakeLists.txtи каковы его основные компоненты?Junior· спрашивают почти всегда· полный разбор — Jobs/Boost - Что такое CMake и какую проблему он решает?Junior· спрашивают почти всегда· полный разбор — Jobs/Boost
- Каковы лучшие практики современного CMake (подход на основе таргетов)?Middle· спрашивают почти всегда· полный разбор — Jobs/Boost
- В чём разница между
PRIVATE,PUBLICиINTERFACEв свойствах таргетов CMake?Middle· спрашивают почти всегда - В чём разница между
target_include_directories()иinclude_directories()?Middle· спрашивают почти всегда - Что такое cache variables в CMake и как их определять и использовать?Middle
- Как сравнить CMake с альтернативами по надёжности, скорости разработки, portability, performance и operational cost?Middle· полный разбор — Jobs/Boost
- В чём разница между
cmake,cmake --buildиmake?Junior· полный разбор — Jobs/Boost - Какая mental model CMake важна для диагностики: lifecycle, graph, runtime, targets, protocol, threads или resources?Senior
- Как понять, что проблема связана именно с CMake, а не с приложением, окружением, сетью или зависимостями?Senior
- Представьте, после изменения CMake сборка, runtime или интеграция стали нестабильными. Как вы будете расследовать проблему?Senior· полный разбор — Jobs/Boost
- Какие ошибки делают команды, когда используют CMake без понимания его модели выполнения или сборки?Middle· полный разбор — Jobs/Boost
- Какую инженерную проблему CMake решает в build/runtime/systems-разработке, если не сводить ответ к определению?Middle· полный разбор — Jobs/Boost
- Какие production или build/runtime-риски есть у CMake: воспроизводимость, совместимость, debugging, ресурсы или supply chain?Senior· полный разбор — Jobs/Boost
- Как устанавливать флаги компилятора в современном CMake?Middle
- Что такое
FetchContentи как он соотносится сExternalProject_Add?Middle· полный разбор — Jobs/Boost - Как находить и использовать внешние библиотеки с помощью
find_package()?Middle - Что такое CMake generator и каковы распространённые генераторы (Makefiles, Ninja, Visual Studio)?Junior· полный разбор — Jobs/Boost
- Что такое imported targets в CMake?Middle· полный разбор — Jobs/Boost
- В чём разница между in-source build и out-of-source build? Какой предпочтителен и почему?Junior
- Как создать статическую библиотеку vs разделяемую библиотеку в CMake?Middle· полный разбор — Jobs/Boost
- В чём разница между
target_link_libraries()и линковкой через пути к библиотекам напрямую?Middle· полный разбор — Jobs/Boost - В чём разница между
add_executable(),add_library()иadd_subdirectory()?Junior· полный разбор — Jobs/Boost - Что такое
CMAKE_BUILD_TYPEи какие значения он обычно принимает?Middle - Что такое CMake Presets и как они помогают локальной разработке и CI?Middle· полный разбор — Jobs/Boost
- Как проектировать CMake-проект для reproducible CI builds на разных генераторах и платформах?Middle· полный разбор — Jobs/Boost
- Как интегрировать Conan/vcpkg с современным target-based CMake?Middle
- Расскажите о случае, когда вы решали проблему с CMake: incident, optimization, migration, debugging или CI/CD.Middle
- Как настроить sanitizer/coverage builds через CMake без глобальных флагов, ломающих зависимости?Middle· полный разбор — Jobs/Boost
- Как правильно экспортировать target и создать package config для
find_package()?Middle· полный разбор — Jobs/Boost - В чём разница между
configure_file()иfile(CONFIGURE ...)?Middle· полный разбор — Jobs/Boost - Как включить и настроить CTest (тестирование CMake) в проекте?Middle
- Как написать модуль
FindXxx.cmakeдля библиотеки без поддержки CMake?Senior· полный разбор — Jobs/Boost - Как определять и использовать CMake options (команда
option())?Junior· полный разбор — Jobs/Boost - В чём разница между
set()сCACHEи без?Middle - Как выполнять кросс-компиляцию с CMake с использованием файла toolchain?Senior· полный разбор — Jobs/Boost
- В чём разница между философией CMake 2.x и современного CMake (3.x)?Senior· полный разбор — Jobs/Boost
- Что такое CPack и как он используется для упаковки?Senior· полный разбор — Jobs/Boost