e.g., . Each build project in turn contains its own file and directory in every project (sub-)directory of included by the command, helping to avoid or speed up regeneration when it is run repeatedly. The generation process and the output could fine-tuned via target properties. Previously it was done via -prefixed global variables that are also used to configure CMake itself and to set up initial defaults. The older approach is discouraged now. Types of build targets Depending on CMakeLists.txt configuration the build files may be either executables, libraries (e.g. , etc.), object file libraries or pseudo-targets (including aliases). CMake can produce object files that can be linked against by executable binaries/libraries, avoiding dynamic (run-time) linking and using static (compile-time) linking instead. This enables flexibility in configuration of various optimizations. Build dependencies may be determined automatically. Precompiled headers It's possible to generate precompiled headers by using CMake since version 3.6. Language CMakeLists.txt CMake has a relatively simple interpreted, imperative scripting language. It supports variables, string manipulation methods, arrays, function/macro declarations, and module inclusion (importing). CMake Language commands (or directives) are read by from a file named . This file specifies the source files and build parameters, which CMake will place in the project's build specification (such as a Makefile). Additionally, -suffixed files can contain scripts used by CMake. To generate a project's build files, one invokes in terminal and specifies the directory that contains . This file contains one or more commands in the form of . Command syntax The arguments of the commands are whitespace-separated and can include keywords to separate groups of arguments. Commands can take keywords. For instance, in the command the keyword is . It serves as a delimiter between the list of source files and some other options. Examples of commands that CMake offers to specify targets and their dependencies and which serve as the starting point of the CMakeLists.txt: — declares an executable binary target with sources (depend on language chosen) to be built — the same but for a library — adds dependencies etc. JSON strings CMake supports extracting values into variables from JSON-data strings (since version 3.19). Internals The executable programs CMake, CPack, and CTest are written in the C++ programming language. Much of CMake's functionality is implemented in modules that are written in the CMake language. Since release 3.0, CMake's documentation uses reStructuredText markup. HTML pages and man pages are generated