반응형
왜 컴파일이 느릴까?
C++ 프로젝트에서 컴파일 속도는 점점 더 중요해지고 있습니다.
프로젝트가 커질수록 빌드 시간이 늘어나고, 작은 수정에도 몇 분씩 기다리는 상황이 반복됩니다.
그 원인 중 하나는 바로 불필요한 헤더 파일 include. 헤더 파일 하나가 또 다른 헤더를 include하고,
그게 또 다른 헤더를 불러오면서 폭발적으로 코드가 늘어나는 include 지옥(include hell)이 발생합니다.
이 문제를 해결해주는 도구가 있습니다.
바로 IWYU (Include-What-You-Use) 입니다.
IWYU란?
Include-What-You-Use는 이름 그대로 "내가 사용하는 것만 include해" 를 지켜주는 도구입니다.
- 내가 사용하는 타입, 함수, 템플릿을 분석해서
- 필요한 헤더는 추천하고, 불필요한 헤더는 제거하라고 알려줍니다.
Clang 기반으로 C++ 코드를 파싱하고,
어떤 심볼이 어느 헤더에 정의되어 있는지를 추적해서 알려주는 방식입니다.
왜 컴파일 속도가 빨라질까?
- Preprocessing (전처리):
- include된 헤더가 줄어들면 펼쳐지는 코드량이 감소합니다.
- Parsing (구문 분석):
- 불필요한 헤더가 없으면 중복 파싱을 줄일 수 있습니다.
- 특히 **템플릿-heavy 코드(STL, Boost)**에서 효과가 큽니다.
- 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 교체하면 안전하게 정리할 수 있습니다.
반응형
'다양한 TIP' 카테고리의 다른 글
UPLUS 가족 공용 데이터 충전하는 방법(인원수마다 늘어나는 용량!) (0) | 2025.04.23 |
---|---|
Claude AI 서비스 상태 확인 방법 (0) | 2025.04.21 |
리눅스 useradd 로 계정 추가하는 방법(/bin/bash) 및 패스워드 설정 (0) | 2025.04.17 |
댓글