Build system 2026-11-05
A build system executes declared transformations from source files and other inputs to build outputs, respecting their dependency graph. Common steps include code generation, compilation, linking and packaging. CMake describes builds through targets such as executables and software libraries, with dependencies between them.[ref]
For example, main.o and math.o must exist before they can be linked into an executable. If only the source for math.o changes, an incremental build can reuse main.o, rebuild math.o and relink. Reuse is valid only when every relevant requirement has been tracked: a changed header, tool option or generated input can invalidate an apparently unchanged output. Correct dependency declarations are part of build correctness.
Dependency graph 2026-11-05
A dependency graph represents requirements as a directed graph. Choose an explicit edge convention: here means that component requires component . A direct edge records an immediate requirement; a directed path records a transitive requirement. Pip's resolver must discover both a requested software package's requirements and the requirements of its dependencies.[ref]
For example, if application requires software library and requires , changing can affect even without an edge . In an acyclic build dependency graph, a topological order of the reversed edges puts prerequisites first. Cycles require special treatment: the graph alone does not establish that a set of mutually dependent build steps can execute. Edge labels can additionally record required versions or build configurations.
Software dependency 2026-11-05
A software dependency is another component, tool, library or service required for some aspect of a program's construction or operation. Dependencies form a dependency graph; direct requirements can introduce additional transitive requirements. Dependency resolution selects versions satisfying the combined constraints.
For example, if one component requires library versions at least 2 but below 3, while another requires at least 3, no single library version satisfies both in one shared installation. A resolver must report the conflict or use an isolation mechanism that genuinely permits separate versions. Pip documents backtracking through candidate package versions to solve such constraints.[ref] Recording selected versions improves reproducibility, but the operating system, input data and execution settings can still affect the result.