# CMake CMakeLists.txt **CMakeLists.txt** is the build configuration file. It describes what to build, where sources are, dependencies, and build options. Written in CMake's scripting language (imperative, case-insensitive commands). Minimal example: ```cmake cmake_minimum_required(VERSION 3.20) project(MyApp) add_executable(myapp main.cpp) ``` This declares a project named `MyApp` (creates a binary `myapp` from `main.cpp`). Run `cmake .` to generate build files in the current directory (or `cmake -B build` for out-of-source). Common commands: ```cmake cmake_minimum_required(VERSION X.Y) # minimum CMake version project(name LANGUAGES C CXX) # project name, languages used add_executable(name source.cpp) # executable target add_library(name source.cpp) # library target target_link_libraries(exe lib) # link target to library find_package(PackageName) # find external package include_directories(/path/to/headers) # add include path set(VARIABLE value) # set variable ``` Commands are functions: `command(arg1 arg2 ...)`. Lists use semicolons or spaces. Variables are `${VAR}`. Comments start with `#`. Structure: 1. `cmake_minimum_required` (must be first) 2. `project()` declaration 3. `find_package()` calls for dependencies 4. `add_executable()` or `add_library()` for targets 5. `target_link_libraries()` and other target configuration 6. `install()` rules (optional) CMake scans source files for dependencies. It's declarative about what you want to build; the generator handles how to actually compile it for your platform.