기본 패턴
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빠른 정리
| 항목 | 설명 |
|---|---|
| 컴파일 | 각 소스 파일을 객체 파일로 변환 |
| 객체 파일 | 아직 실행 파일은 아니지만 링크 가능한 중간 결과물 |
| 링크 | 여러 객체 파일과 라이브러리를 결합 |
| 선언과 정의 | 헤더와 소스 파일을 분리하는 핵심 기준 |
| 증분 빌드 | 바뀐 파일만 다시 컴파일해 시간을 줄일 수 있음 |
주의할 점
함수 선언은 있는데 정의가 빠졌거나, 같은 전역 정의가 여러 파일에 있으면 링크 단계에서 실패합니다. 컴파일이 통과해도 링크 오류는 따로 확인해야 합니다.