Un Makefile è un file di testo utilizzato dall'utility 'make' (e strumenti simili di automazione della build) per controllare la compilazione e la costruzione di progetti software. Contiene una serie di regole che definiscono le dipendenze tra i file sorgente e i comandi necessari per trasformare tali file sorgente in programmi eseguibili o librerie. Ciascuna regola è tipicamente composta da un target (il file da costruire), un elenco di prerequisites (dipendenze) e la recipe (comandi shell) necessari per creare il target se un qualsiasi prerequisito è più recente del target stesso. I Makefile sono cruciali nello sviluppo C/C++ e in molti altri linguaggi compilati per la gestione di processi di build complessi, assicurando che avvengano solo le ricompilazioni necessarie, il che fa risparmiare tempo significativo durante i cicli di sviluppo. Essi consentono agli sviluppatori di definire passaggi di build personalizzati, pulire i file generati e automatizzare le procedure di deployment. La sintassi è altamente specifica, basandosi sui caratteri di tabulazione (non sugli spazi) per indentare le righe della recipe, una fonte comune di errori per chi si avvicina a questo strumento.