C전처리와 빌드

분할 컴파일과 링크

여러 `.c` 파일을 객체 파일로 나눈 뒤 하나의 실행 파일로 묶는 C의 분할 컴파일 흐름을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

bash
cc -c main.c
cc -c math_utils.c
cc main.o math_utils.o -o app

설명

  • C 프로젝트는 보통 소스 파일마다 따로 컴파일한 뒤, 마지막에 링크 단계에서 하나로 묶습니다.
  • 컴파일 단계는 각 .c 파일을 객체 파일 .o로 바꾸고, 링크 단계는 필요한 심볼을 연결해 실행 파일을 만듭니다.
  • 헤더에는 선언을 두고 소스 파일에는 정의를 두어야 여러 파일이 자연스럽게 협업할 수 있습니다.
  • 이 구조를 알면 "undefined reference"나 "multiple definition" 같은 빌드 오류를 해석하기 쉬워집니다.

짧은 예제

bash
cc -Wall -Wextra -c main.c
cc -Wall -Wextra -c utils.c
cc main.o utils.o -o app
./app

빠른 정리

항목설명
컴파일각 소스 파일을 객체 파일로 변환
객체 파일아직 실행 파일은 아니지만 링크 가능한 중간 결과물
링크여러 객체 파일과 라이브러리를 결합
선언과 정의헤더와 소스 파일을 분리하는 핵심 기준
증분 빌드바뀐 파일만 다시 컴파일해 시간을 줄일 수 있음

주의할 점

함수 선언은 있는데 정의가 빠졌거나, 같은 전역 정의가 여러 파일에 있으면 링크 단계에서 실패합니다. 컴파일이 통과해도 링크 오류는 따로 확인해야 합니다.