컴파일이란? (+빌드)

eeseol·2025년 3월 31일

Tech & Trend Insight

목록 보기
6/7

컴파일이란?

인간이 이해할 수 있는 언어로 작성된 C프로그램을
컴퓨터가 이해할 수 있는 기계어 파일로 변환하는 과정이다.

컴파일 과정은 총 4단계로 이루어져 있다.



1. 전처리 (Preprocessing)

: 소스코드에서 #으로 시작하는 전처리 지시문을 처리하는 단계이다.

  • 헤더파일 내용 삽입 (#include)
  • 매크로 치환 (#define)
  • 조건부 컴파일 처리(#ifdef, #ifndef 등)

2. 컴파일러 (Compilation)

: 전처리 결과를 어셈블리 코드로 변환하는 단계이다.

어셈블리어 : 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다.

어셈블리어 코드 화면
출처 : https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4

3. 어셈블 (Assembly)

: 어셈블리 코드를 기계어로 바꾸는 단계이다.

  • 이때 생기는 파일이 .o 또는 .obj 파일이다.


출처 : https://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B3%84%EC%96%B4

4. 링킹 (Linking)

: 여러 오브젝트 파일과 라이브러리들을 하나의 실행 파일로 묶는 단계

  • 이때 메모리 주소를 결정한다.
  • 외부 참조 해결(extern 변수나 함수들)

결과적으로 다음과 같은 파일이 생성된다.

  • 유닉스/리눅스 : a.out 또는 실행파일
  • 윈도우 : .exe 파일




그럼 빌드란 무엇인가?

: 빌드는 위에 작성한 전 과정이다.
즉, 소스코드(.c)를 실행파일(.exe, a.out 등)으로 바꾸는 전체 흐름이다.



왜 비주얼스튜디오에서 컴파일이랑 빌드를 따로 제공하는거죠??

: 효율적인 개발 흐름을 지원하기 위해서입니다.

visual Studio에서의 "컴파일" VS "빌드"

컴파일

  • .c -> .obj (오브젝트 파일 생성)
  • 소스파일을 개별적으로 기계여로 변환

빌드

  • 모든 .obj를 링킹해 실행파일 생성
  • 전체 프로젝트를 빌드

[소스코드]

[Compile] ⇒ [오브젝트 파일 (.obj)]

[Link] ⇒ [실행 파일 (.exe)]

컴파일과 빌드를 분리함으로써 얻는 점

  1. 수정된 파일만 빠르게 테스트 가능
    • 여러 개의 .c 파일이 있고, 하나의 파일만 고치면 된다.
    • 전체를 빌드할 필요 없이 그 파일만 컴파일 하면 된다. => 시간절약
  2. 에러 디버깅과 컴파일 단계 문제를 분리해서 볼 수 있다.
    • 컴파일 단계에서 생기는 문법 오류, 타입 오류 등은 컴파일만 해도 확인 가능
    • 링킹 에러 (unresolved external symbol)는 컴파일은 되지만 빌드시 발생함



결론 : 시간 절약을 위해!

빌드 시간이 오래 걸리는 대규모 프로젝트에서 불필요한 재빌드를 줄일 수 있다!

profile
안녕하세요.

0개의 댓글