Makefile은 'make' 유틸리티 및 이와 유사한 빌드 자동화 도구에서 소프트웨어 프로젝트의 컴파일 및 빌드 과정을 제어하기 위해 사용하는 텍스트 파일입니다. 이 파일은 소스 파일 간의 의존 관계와 해당 소스 파일들을 실행 가능한 프로그램이나 라이브러리로 변환하는 데 필요한 명령어를 정의하는 일련의 규칙(rules)들을 포함하고 있습니다. 각 규칙은 일반적으로 타겟(target, 생성하고자 하는 파일), 필수 조건(prerequisites, 의존성 파일 목록), 그리고 필수 조건 중 하나라도 타겟보다 최신일 경우 실행되는 레시피(recipe, 쉘 명령어)로 구성됩니다. Makefile은 특히 C 및 C++ 개발 환경과 여러 컴파일 언어에서 복잡한 빌드 프로세스를 효율적으로 관리하는 데 매우 중요한 역할을 합니다. 전체 프로젝트를 매번 다시 빌드하는 대신 변경된 부분만 선별적으로 재컴파일하도록 보장하여 개발 사이클에서 소요되는 시간을 획기적으로 단축해 줍니다. 또한 개발자는 이를 통해 사용자 정의 빌드 단계 정의, 생성된 임시 파일 정리, 배포 절차 자동화 등을 수행할 수 있습니다. Makefile의 구문은 매우 엄격하며, 특히 레시피 라인을 들여쓰기할 때 공백(space)이 아닌 반드시 탭(tab) 문자를 사용해야 한다는 점이 특징입니다. 이는 해당 도구를 처음 접하는 사용자들에게 가장 흔하게 발생하는 오류 원인 중 하나입니다.