본문 바로가기
다양한 TIP

컴파일 속도 올리기 프로젝트(with IWYU: include-what-you-use)

by 유기농프로그래밍 2025. 4. 24.
반응형

왜 컴파일이 느릴까?

C++ 프로젝트에서 컴파일 속도는 점점 더 중요해지고 있습니다.
프로젝트가 커질수록 빌드 시간이 늘어나고, 작은 수정에도 몇 분씩 기다리는 상황이 반복됩니다.

그 원인 중 하나는 바로 불필요한 헤더 파일 include. 헤더 파일 하나가 또 다른 헤더를 include하고,
그게 또 다른 헤더를 불러오면서 폭발적으로 코드가 늘어나는 include 지옥(include hell)이 발생합니다.

이 문제를 해결해주는 도구가 있습니다.


바로 IWYU (Include-What-You-Use) 입니다.

 

IWYU란?

Include-What-You-Use는 이름 그대로 "내가 사용하는 것만 include해" 를 지켜주는 도구입니다.

  • 내가 사용하는 타입, 함수, 템플릿을 분석해서
  • 필요한 헤더는 추천하고, 불필요한 헤더는 제거하라고 알려줍니다.

Clang 기반으로 C++ 코드를 파싱하고,
어떤 심볼이 어느 헤더에 정의되어 있는지를 추적해서 알려주는 방식입니다.

 

왜 컴파일 속도가 빨라질까?

  1. Preprocessing (전처리):
    • include된 헤더가 줄어들면 펼쳐지는 코드량이 감소합니다.
  2. Parsing (구문 분석):
    • 불필요한 헤더가 없으면 중복 파싱을 줄일 수 있습니다.
    • 특히 **템플릿-heavy 코드(STL, Boost)**에서 효과가 큽니다.
  3. Code Generation (코드 생성):
    • 최적화 처리 대상이 줄어들어 코드 생성도 빨라집니다.

결국, include를 정리하는 것만으로 전체 빌드 시간을 줄일 수 있습니다.

 

 

IWYU 적용하기 (Step by Step)

1. IWYU 설치

git clone https://github.com/include-what-you-use/include-what-you-use.git
cd include-what-you-use
mkdir build && cd build
cmake -G "Ninja" -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-14 ..
ninja

2. IWYU 실행하기

./bin/include-what-you-use -std=c++14 -I./include your_file.cpp

출력 예시:

your_file.cpp should add these lines:
#include <vector>  // for vector

your_file.cpp should remove these lines:
- #include <map>  // lines 5-5

The full include-list for your_file.cpp:
#include <iostream>  // for cout
#include <vector>    // for vector
 

 

구성:

1. should add these lines:

  • 추가해야 할 헤더.
  • 사용된 타입, 함수 등과 관련된 헤더인데 현재 include 안 된 것.

2. should remove these lines:

  • 지워야 할 헤더.
  • 현재 include 돼 있지만, 실제로는 필요 없는 헤더.

3. The full include-list for:

  • IWYU가 추천하는 최종 헤더 목록.
  • 이 파일에서 딱 필요한 것만 남긴 상태.

 

이걸 왜 보여줄까?

  • should add / remove차이만 보여줌.
  • The full include-list최종적으로 어떻게 구성해야 하는지 전체 그림을 보여줌.

그래서 그냥 이거 통째로 복사해서 include 교체하면 안전하게 정리할 수 있습니다.

반응형

댓글