C++ CLion 완벽 가이드 | 설치·설정·디버깅·리팩토링·생산성 [#53-1]
이 글의 핵심
C++ CLion IDE 마스터: CMake 설정이 안 돼요, 디버거가 연결 안 돼요 같은 문제 해결. 툴체인 설정, 고급 디버깅, 리팩토링 도구, 생산성 단축키, 프로덕션 패턴까지 900줄 분량으로 다룹니다.
들어가며: “C++ IDE 뭘 쓰지?”
VSCode vs CLion vs Visual Studio
VSCode는 가볍고 확장이 많지만, C++ 전용 기능은 제한적입니다. Visual Studio는 Windows에서 강력하지만 크로스 플랫폼이 아닙니다. CLion은 JetBrains의 C++ 전용 IDE로, Linux/macOS/Windows에서 동일한 경험을 제공하며 CMake·디버깅·리팩토링이 통합되어 있습니다.
실제 겪는 문제 시나리오:
- CMake 프로젝트를 열었는데 "툴체인을 찾을 수 없음" 에러 → GCC/Clang 경로 설정 필요
- 디버거로 실행했는데 브레이크포인트가 안 걸림 → Debug 빌드·심볼 확인 필요
- 10만 줄 코드베이스에서 함수 정의 찾기가 너무 느림 → CLion의 인덱싱·심볼 검색 활용
- 리팩토링할 때 변수명 바꾸면 수동으로 다 찾아서 고쳐야 함 → Rename Refactoring 사용
- 팀원마다 다른 OS(Linux/macOS/Windows) → CLion으로 동일한 워크플로 공유
- Docker 컨테이너 안에서 빌드·실행해야 함 → CLion 원격/도커 툴체인
- vcpkg/Conan 설치한 라이브러리 경로를 못 찾음 → 툴체인·CMake 옵션 연동
- 인덱싱 중 CPU 100%로 다른 작업이 불가 → 제외 경로 설정 필요
- "undefined reference" 에러가 나는데 헤더는 잘 찾음 → 링크 대상·소스 파일 누락
시나리오별 상세:
| 시나리오 | 증상 | CLion에서 해결 |
|---|---|---|
| 신규 프로젝트 | CMake 없이 시작 | New Project → C++ Executable으로 자동 CMake 생성 |
| 레거시 Makefile | Makefile만 있음 | CMake로 변환하거나, Compilation Database 생성 후 열기 |
| 멀티 플랫폼 | Win/Mac/Linux 각각 빌드 | CMake Presets로 프로파일 분리, 툴체인 전환 |
| 대규모 | 인덱싱 10분 이상 | build, third_party 제외, 메모리 증가 |
CLion으로 해결:
| 문제 | CLion 기능 |
|---|---|
| 툴체인 설정 | Settings > Toolchains에서 GCC/Clang/MSVC 선택 |
| 디버깅 | GDB/LLDB 통합, 조건부 브레이크포인트, Watches |
| 코드 탐색 | Go to Definition, Find Usages, Call Hierarchy |
| 리팩토링 | Rename, Extract, Change Signature |
| 크로스 플랫폼 | 동일 UI, CMake Presets 지원 |
| 원격 개발 | SSH, Docker, WSL 툴체인 |
요구 환경: CLion 2023.x 이상, C++17 이상, CMake 3.16+
이 글을 읽으면:
- CLion 설치부터 툴체인·CMake 설정까지 완전히 구성할 수 있습니다.
- 고급 디버깅 기법(조건부 BP, 역디버깅 등)을 활용할 수 있습니다.
- 리팩토링·단축키로 생산성을 높일 수 있습니다.
- 자주 발생하는 에러와 해결법을 알 수 있습니다.
- 프로덕션 환경에서의 패턴을 적용할 수 있습니다.
실무 적용 경험: 이 글은 대규모 C++ 프로젝트에서 실제로 겪은 문제와 해결 과정을 바탕으로 작성되었습니다. 책이나 문서에서 다루지 않는 실전 함정과 디버깅 팁을 포함합니다.
목차
- 문제 시나리오와 CLion 선택
- CLion 완전 설치·설정 가이드
- CMake 프로젝트 구성
- 고급 디버깅
- 리팩토링 도구
- 생산성 단축키·팁
- 자주 발생하는 문제
- 프로덕션 패턴
- 체크리스트
1. 문제 시나리오와 CLion 선택
언제 CLion을 쓰면 좋을까?
flowchart TD
A[C++ 프로젝트] --> B{주요 환경은?}
B -->|Windows 전용| C[Visual Studio]
B -->|Linux/macOS/크로스플랫폼| D[CLion]
B -->|가벼운 편집만| E[VSCode]
D --> D1[CMake 기반]
D --> D2[디버깅·리팩토링 중요]
D --> D3[원격/Docker 개발]
CLion vs 다른 IDE 비교
| 항목 | CLion | Visual Studio | VSCode |
|---|---|---|---|
| 플랫폼 | Win/Mac/Linux | Windows | 모두 |
| 빌드 시스템 | CMake 중심 | MSBuild, CMake | CMake 등 확장 |
| 디버깅 | GDB/LLDB | MSVC 디버거 | 확장 의존 |
| 리팩토링 | 내장 강력 | 내장 | 제한적 |
| 인덱싱 | 전체 코드베이스 | 빠름 | 확장 의존 |
| 가격 | 유료(학생 무료) | Community 무료 | 무료 |
2. CLion 완전 설치·설정 가이드
2.1 설치
macOS:
# Homebrew로 설치
brew install --cask clion
Linux (Ubuntu/Debian):
# JetBrains Toolbox 또는 직접 다운로드
# https://www.jetbrains.com/clion/download/
sudo snap install clion --classic
Windows:
- https://www.jetbrains.com/clion/download/ 에서 설치 프로그램 다운로드
- MinGW-w64 또는 Visual Studio Build Tools 사전 설치 권장
2.2 툴체인(Toolchain) 설정
CLion은 툴체인으로 컴파일러·디버거·CMake를 묶어 관리합니다.
설정 경로: Settings (macOS: Cmd+,) → Build, Execution, Deployment → Toolchains
flowchart LR
subgraph Toolchain[툴체인 구성]
T1[CMake]
T2[C/C++ 컴파일러]
T3[디버거 GDB/LLDB]
T4[빌드 도구 make/ninja]
end
macOS - System 툴체인:
1. Toolchains → + → System
2. Name: macOS (Clang)
3. C Compiler: /usr/bin/clang (또는 Xcode 경로)
4. C++ Compiler: /usr/bin/clang++
5. Debugger: LLDB (기본)
6. Environment: 기본 또는 Custom
Linux - GCC 툴체인:
# GCC 설치 확인
gcc --version
g++ --version
# Ubuntu/Debian
sudo apt install build-essential cmake gdb
1. Toolchains → + → System
2. C Compiler: /usr/bin/gcc
3. C++ Compiler: /usr/bin/g++
4. Debugger: GDB
Windows - MinGW:
1. MinGW-w64 또는 MSYS2 설치
2. Toolchains → + → MinGW
3. Environment: MinGW 설치 경로 지정 (예: C:\msys64\mingw64)
4. 또는 Visual Studio 툴체인 선택
CMake 옵션 예시 (툴체인별):
// CMakePresets.json - 툴체인 자동 감지
{
"version": 3,
"configurePresets": [
{
"name": "linux-debug",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_CXX_COMPILER": "/usr/bin/g++"
}
}
]
}
2.3 CMake 프로파일 설정
설정 경로: Settings → Build, Execution, Deployment → CMake
| 항목 | 설명 | 권장값 |
|---|---|---|
| Build type | Debug / Release / RelWithDebInfo | 개발: Debug |
| Toolchain | 사용할 툴체인 | 시스템에 맞게 |
| CMake options | 추가 옵션 | -DCMAKE_EXPORT_COMPILE_COMMANDS=ON |
| Build directory | 빌드 출력 경로 | cmake-build-debug 등 |
디버그·릴리즈 프로파일 분리:
1. CMake → Profiles → + 로 새 프로파일 추가
2. Debug: Build type = Debug, 이름 = Debug
3. Release: Build type = Release, 이름 = Release
4. 실행 시 상단 드롭다운에서 프로파일 선택
2.4 코드 스타일·Clang-Tidy
Clang-Tidy 연동 (정적 분석):
# .clang-tidy - 프로젝트 루트에 생성
Checks: >
-*,
bugprone-*,
performance-*,
modernize-*,
readability-*
WarningsAsErrors: ''
HeaderFilterRegex: '.*'
설정: Settings → Editor → Inspections → C/C++ → Clang-Tidy 체크
2.5 원격·Docker 툴체인 (선택)
SSH 원격 개발:
1. Toolchains → + → Remote Host
2. SSH Configuration: 호스트, 사용자, 키 경로
3. 원격 머신에 CMake, GCC/Clang, GDB 설치 필요
4. 빌드·실행이 원격에서 수행됨
Docker 툴체인:
1. Toolchains → + → Docker
2. Docker 이미지 선택 (예: ubuntu:22.04)
3. 이미지 내부에 build-essential, cmake, gdb 설치된 Dockerfile 사용 권장
Dockerfile 예시:
# Dockerfile.dev
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
build-essential cmake gdb git \
&& rm -rf /var/lib/apt/lists/*
3. CMake 프로젝트 구성
3.1 새 프로젝트 생성
File → New Project → C++ Executable (또는 Library)
생성되는 기본 구조:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(my_project CXX)
set(CMAKE_CXX_STANDARD 17)
add_executable(my_project main.cpp)
3.2 기존 CMake 프로젝트 열기
File → Open → 프로젝트 루트의 CMakeLists.txt 또는 폴더 선택
CLion이 자동으로:
- CMake 설정 실행
- 컴파일 데이터베이스 생성
- 코드 인덱싱 시작
3.3 vcpkg·Conan 연동
vcpkg:
# CMakeLists.txt
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
find_package(nlohmann_json CONFIG REQUIRED)
target_link_libraries(my_project PRIVATE nlohmann_json::nlohmann_json)
CLion에서 vcpkg 툴체인 사용 시 CMAKE_TOOLCHAIN_FILE을 툴체인 환경 변수로 설정.
Conan:
# conanfile.txt
[requires]
nlohmann_json/3.11.2
[generators]
CMakeDeps
CMakeToolchain
# CMakeLists.txt
find_package(nlohmann_json REQUIRED)
target_link_libraries(my_project PRIVATE nlohmann_json::nlohmann_json)
3.4 CMake Presets 활용
// CMakePresets.json
{
"version": 3,
"configurePresets": [
{
"name": "default",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "debug",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "release",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
]
}
CLion은 CMakePresets.json을 자동 감지해 프로파일로 가져옵니다.
4. 고급 디버깅
4.1 기본 디버깅
실행: Shift+F10 (Run), Shift+F9 (Debug)
브레이크포인트: 줄 번호 왼쪽 클릭 또는 Ctrl+F8 (Win/Linux) / Cmd+F8 (Mac)
디버깅 예제 코드:
// debug_demo.cpp
#include <iostream>
#include <vector>
int computeSum(const std::vector<int>& data) {
int sum = 0;
for (size_t i = 0; i < data.size(); ++i) {
sum += data[i]; // 브레이크포인트: i, sum 관찰
}
return sum;
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int result = computeSum(vec);
std::cout << "Sum: " << result << "\n";
return 0;
}
4.2 조건부 브레이크포인트
사용법: 브레이크포인트 우클릭 → Edit Breakpoint → Condition 입력
예: i == 3 → i가 3일 때만 멈춤
예: ptr == nullptr → 널 포인터일 때만
예: data.size() > 1000 → 큰 입력에서만
4.3 Watches·Evaluate Expression
Watches: 디버깅 중 변수 추가 관찰
Watches 창에 입력:
- vec.size()
- vec.data()
- *ptr (포인터 역참조)
Evaluate Expression (Alt+F8): 실행 중 임의 식 계산
// 디버깅 중 Evaluate에서 실행 가능
vec.size()
std::accumulate(vec.begin(), vec.end(), 0)
4.4 역디버깅 (Reverse Debugging)
GDB 7.0+ / LLDB에서 실행을 역방향으로 되돌리며 디버깅할 수 있습니다.
활성화: Settings → Build, Execution, Deployment → Debugger → Enable reverse debugging
제한: 기록 모드로 실행해 오버헤드가 큼. 필요한 구간만 사용 권장.
4.5 디버깅 워크플로
flowchart TD
A[버그 재현] --> B[재현 가능한 최소 코드 작성]
B --> C[의심 구간에 브레이크포인트]
C --> D[Debug 실행]
D --> E[Step Over/Into로 흐름 추적]
E --> F[Watches로 변수 확인]
F --> G{원인 파악?}
G -->|아니오| C
G -->|예| H[수정 후 재검증]
4.6 데이터 브레이크포인트
메모리 주소·변수 값 변경 시 멈추는 브레이크포인트.
1. Run → View Breakpoints (Ctrl+Shift+F8)
2. + → C++ Data Breakpoint
3. 예: &buffer — buffer 주소의 메모리가 변경될 때
4. 예: ptr — ptr가 가리키는 값이 변경될 때
사용 사례: 버퍼 오버플로우, 잘못된 포인터 수정, 레이스 컨디션 의심 시.
4.7 로그포인트 (Logpoint)
브레이크 없이 로그만 출력. 성능 영향 최소.
1. 브레이크포인트 우클릭 → Edit Breakpoint
2. "Log message to console" 체크
3. 예: "i={i}, sum={sum}"
4. 실행 시 콘솔에 로그만 출력되고 멈추지 않음
5. 리팩토링 도구
5.1 Rename (이름 변경)
단축키: Shift+F6
변수·함수·클래스·파일 이름을 바꾸면 모든 참조가 자동으로 변경됩니다.
// Before: computeSum → computeTotal 로 변경
int computeSum(const std::vector<int>& data) {
// ...
}
// Refactor → Rename (Shift+F6) → computeTotal
// 모든 호출부가 computeTotal로 변경됨
5.2 Extract (추출)
Extract Function: Ctrl+Alt+M (Win/Linux) / Cmd+Alt+M (Mac)
선택한 코드 블록을 새 함수로 추출합니다.
// Before
void process() {
std::vector<int> data = loadData();
int sum = 0;
for (int x : data) sum += x;
std::cout << "Sum: " << sum << "\n";
}
// 블록 선택 후 Extract Function → 이름: printSum
// After
void printSum(const std::vector<int>& data) {
int sum = 0;
for (int x : data) sum += x;
std::cout << "Sum: " << sum << "\n";
}
void process() {
std::vector<int> data = loadData();
printSum(data);
}
Extract Variable: Ctrl+Alt+V / Cmd+Alt+V
Extract Parameter: Ctrl+Alt+P / Cmd+Alt+P
5.3 Change Signature
함수 시그니처 변경 시 호출부를 자동 업데이트합니다.
Refactor → Change Signature (Ctrl+F6 / Cmd+F6)
- 매개변수 추가·삭제·순서 변경
- 기본값 설정
- 반환 타입 변경
5.4 Inline
함수 본문을 호출부에 인라인하고 함수 정의를 제거합니다.
Refactor → Inline (Ctrl+Alt+N / Cmd+Alt+N)
6. 생산성 단축키·팁
6.1 필수 단축키 (macOS: Cmd → Ctrl)
| 동작 | Win/Linux | macOS |
|---|---|---|
| 검색 전체 | Shift+Shift | Shift+Shift |
| 파일 검색 | Ctrl+Shift+N | Cmd+Shift+O |
| 심볼 검색 | Ctrl+Alt+Shift+N | Cmd+Alt+O |
| 정의로 이동 | Ctrl+B | Cmd+B |
| 구현으로 이동 | Ctrl+Alt+B | Cmd+Alt+B |
| 사용처 찾기 | Alt+F7 | Alt+F7 |
| 호출 계층 | Ctrl+Alt+H | Ctrl+Alt+H |
| 리팩토링 메뉴 | Ctrl+Shift+Alt+T | Ctrl+T |
| 최근 파일 | Ctrl+E | Cmd+E |
| 에디터 분할 | `Shift+Alt+좌/우 | Cmd+\ |
6.2 코드 생성
Live Template:
1. Settings → Editor → Live Templates
2. C++ → + → Live Template
3. Abbreviation: fori (for loop with index)
4. Template text:
for (size_t $INDEX$ = 0; $INDEX$ < $CONTAINER$.size(); ++$INDEX$) {
$END$
}
5. Variables: INDEX=index, CONTAINER=container
기본 제공: main → int main() 생성, for → 범위 for 루프 등
6.3 다중 커서·선택
- 다중 선택:
Alt+J(다음 일치),Alt+Shift+J(모든 일치) - 컬럼 선택:
Alt+Shift+드래그(블록 선택) - 라인 복제:
Ctrl+D/Cmd+D
6.4 구조 보기
- File Structure:
Ctrl+F12/Cmd+F12— 현재 파일의 함수·클래스 목록 - Structure 창: 사이드바에서 클래스·함수 트리
- Hierarchy:
Ctrl+H— 클래스 상속 계층
6.5 TODO·FIXME
// TODO: 최적화 필요
// FIXME: 경계 조건 확인
View → Tool Windows → TODO — 프로젝트 전체 TODO/FIXME 목록
6.6 로컬 히스토리
VCS 없이 파일 변경 이력을 로컬에 저장합니다.
File → Local History → Show History — 이전 버전 복원 가능
6.7 북마크·핀
- 북마크:
F3— 현재 위치 북마크,Ctrl+F3— 이름 붙인 북마크 - 핀: 에디터 탭 우클릭 → Pin Tab — 자주 쓰는 파일 고정
6.8 스크래치 파일
임시 코드를 프로젝트 외부에 저장.
File → New → Scratch File → C++ 선택 — *.cpp 임시 파일 생성, 프로젝트 빌드에 포함되지 않음.
6.9 Compare with Clipboard / Branch
- Clipboard와 비교:
Ctrl+Shift+V— 클립보드 내용과 현재 파일 diff - Git Branch 비교:
Git→Compare with Branch— 다른 브랜치와 diff
6.10 Postfix 완성
코드 입력 후 점(.)과 키워드로 변환.
// 예: vec.for → 범위 for 루프로 변환
std::vector<int> vec = {1, 2, 3};
vec.for // Tab → for (auto&& x : vec) { }
자주 쓰는 것: .for, .if, .null, .not, .cast
7. 자주 발생하는 문제
문제 1: “No toolchain found” / “툴체인을 찾을 수 없음”
원인: 시스템에 C++ 컴파일러가 없거나, CLion이 경로를 찾지 못함.
해결:
# macOS: Xcode Command Line Tools 설치
xcode-select --install
# Ubuntu/Debian
sudo apt install build-essential cmake gdb
# 경로 확인
which g++
which clang++
CLion: Settings → Toolchains → + → System → 컴파일러 경로 수동 지정
문제 2: “CMake project is not loaded” / CMake 설정 실패
원인: CMakeLists.txt 문법 오류, 의존성 누락, 툴체인 불일치.
해결:
- CMakeLists.txt 문법 확인:
# 흔한 실수: 괄호 불일치
add_executable(my_app
main.cpp
# 닫는 괄호 누락
-
CMake 로그 확인:
View→Tool Windows→CMake— 에러 메시지 확인 -
캐시 삭제 후 재설정:
rm -rf cmake-build-* build
# CLion에서 File → Reload CMake Project
문제 3: 디버거에서 브레이크포인트가 안 걸림 (회색)
원인: Release 빌드로 실행 중이거나, 최적화로 인해 라인이 생략됨.
해결:
- Debug 프로파일로 빌드·실행 확인
- CMake 옵션에 디버그 정보 추가:
# CMakeLists.txt - Debug에서만
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
endif()
- 최적화 비활성화:
-O0사용
문제 4: “Cannot find -lxxx” (링커 에러)
원인: 라이브러리 경로 또는 링크 대상이 잘못됨.
해결:
# 올바른 find_package 및 target_link_libraries
find_package(OpenSSL REQUIRED)
target_link_libraries(my_app PRIVATE OpenSSL::SSL OpenSSL::Crypto)
# vcpkg 사용 시
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
find_package(OpenSSL CONFIG REQUIRED)
문제 5: 인덱싱이 너무 느림 / CPU 100%
원인: 대규모 프로젝트, 외부 라이브러리 포함, 빌드 디렉터리 인덱싱.
해결:
-
제외 경로 설정:
Settings→Build, Execution, Deployment→CMake→Exclude from project에build,cmake-build-*,third_party등 추가 -
인덱싱 제외:
Settings→Project→Directories→ 폴더 우클릭 →Mark as→Excluded -
메모리 할당 증가:
Help→Edit Custom VM Options→-Xmx4096m(4GB 등)
문제 6: “undefined reference” — 헤더만 있고 구현 없음
원인: 선언만 있고 정의가 없거나, 링크 대상에 소스 파일 미포함.
해결:
# 모든 소스 파일 포함
add_executable(my_app
main.cpp
utils.cpp
parser.cpp
)
# utils.cpp에 Utils::parse() 구현이 있어야 함
문제 7: Docker/원격 툴체인 연결 실패
원인: SSH 키, 경로, 권한 문제.
해결:
- SSH 연결 테스트: 터미널에서
ssh user@host수동 확인 - 원격 컴파일러 경로:
/usr/bin/g++등 표준 경로 사용 - 디버거: 원격에 GDB/LLDB 설치 확인
문제 8: 한글 경로·파일명에서 빌드 실패
원인: 일부 툴체인·CMake가 비ASCII 경로를 제대로 처리하지 못함.
해결: 프로젝트 경로를 영문만 사용 (예: C:\dev\my_project)
문제 9: “Symbol not found” / 헤더는 있는데 정의 못 찾음
원인: compile_commands.json 미생성, 인덱싱 미완료, 잘못된 include 경로.
해결:
# CMakeLists.txt
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# 빌드 후 compile_commands.json 생성됨
# 수동 생성 (CLion 외부에서)
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
# build/compile_commands.json 확인
문제 10: Run Configuration이 저장 안 됨
원인: “Share” 체크 안 함 → 로컬에만 저장.
해결: Edit Configurations → 해당 설정 → 우측 상단 “Share” 체크 → .idea/runConfigurations/에 XML로 저장되어 팀과 공유 가능.
8. 프로덕션 패턴
8.1 팀 공통 설정
EditorConfig로 포맷 통일:
# .editorconfig
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{cpp,h,hpp}]
indent_size = 4
공유 Run Configuration:
1. Run → Edit Configurations
2. + → CMake Application
3. 타겟, 실행 인자, 환경 변수 설정
4. "Share" 체크 → .idea/runConfigurations/ 에 저장
5. 팀원이 동일 설정 사용
8.2 CI와 동일한 빌드
CLion에서 사용하는 CMake 옵션을 CI 스크립트와 맞춥니다.
# .github/workflows/build.yml 예시
- name: Configure
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=g++-12
- name: Build
run: cmake --build build
CLion CMake options에 동일한 -D 옵션 추가
8.3 프로파일별 설정
| 프로파일 | 용도 | CMAKE_BUILD_TYPE |
|---|---|---|
| Debug | 개발·디버깅 | Debug |
| Release | 성능 측정·배포 | Release |
| RelWithDebInfo | 프로파일링·최적화 디버깅 | RelWithDebInfo |
8.4 대규모 프로젝트
flowchart TD
A[대규모 코드베이스] --> B[CMake Presets로 프로파일 분리]
B --> C[제외 경로 설정]
C --> D[인덱싱 최적화]
D --> E[모듈별 Run Configuration]
- Compilation Database:
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON— Clangd 등과 공유 - 모듈화: 서브디렉터리별
add_subdirectory, 필요한 타겟만 빌드
8.5 코드 품질 게이트
# .clang-tidy - CI와 동일 규칙
Checks: >
bugprone-*,
performance-*,
modernize-*,
readability-*
WarningsAsErrors: 'bugprone-*,performance-*'
CLion에서 저장 시 또는 커밋 전에 Clang-Tidy 경고를 0으로 유지하는 습관.
9. 체크리스트
설치·설정
- CLion 설치 (JetBrains Toolbox 또는 직접)
- 툴체인 설정 (GCC/Clang/MSVC)
- CMake 프로파일 구성 (Debug/Release)
-
CMAKE_EXPORT_COMPILE_COMMANDS=ON설정 - Clang-Tidy 연동 (선택)
디버깅
- Debug 프로파일로 빌드·실행
- 브레이크포인트·조건부 BP 활용
- Watches·Evaluate Expression 사용
- 역디버깅 필요 시 활성화
리팩토링
- Rename (Shift+F6) — 이름 변경
- Extract Function/Variable
- Change Signature
- Find Usages로 영향 범위 확인
생산성
- 필수 단축키 숙지 (검색, 정의로 이동, 사용처 찾기)
- Live Template 커스터마이즈
- TODO 창 활용
- 로컬 히스토리 복원
프로덕션
- EditorConfig 공유
- Run Configuration 공유
- CI와 동일한 CMake 옵션
- 제외 경로로 인덱싱 최적화
정리
| 항목 | 핵심 |
|---|---|
| 설정 | 툴체인·CMake 프로파일·Debug/Release 분리 |
| 디버깅 | 조건부 BP, Watches, Evaluate, 역디버깅 |
| 리팩토링 | Rename, Extract, Change Signature |
| 생산성 | 검색, 정의 이동, 단축키, Live Template |
| 에러 | 툴체인·CMake·디버그 심볼·링커·인덱싱 |
| 프로덕션 | EditorConfig, Run Config 공유, CI 일치 |
핵심 원칙:
- Debug로 디버깅 — Release에서는 브레이크포인트가 제대로 동작하지 않을 수 있음
- 리팩토링은 도구에 맡기기 — 수동 변경은 누락 위험
- 제외 경로 설정 — 빌드 산출물·서브모듈은 인덱싱에서 제외
- 팀 설정 공유 — Run Config, EditorConfig로 환경 통일
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. C++ 크로스 플랫폼 개발, 대규모 코드베이스 탐색, 리팩토링 작업, 원격/도커 개발 등에 활용합니다. CLion은 CMake 기반 프로젝트에 최적화되어 있어, vcpkg·Conan과 함께 사용하면 의존성 관리도 편합니다.
Q. 선행으로 읽으면 좋은 글은?
A. CMake 입문에서 CMake 기본을, GDB/LLDB 디버거에서 디버깅 개념을 먼저 익히면 좋습니다. VSCode C++ 설정과 비교해 보면 IDE 선택에 도움이 됩니다.
Q. 더 깊이 공부하려면?
A. CLion 공식 문서, CMake 문서, cppreference를 참고하세요. JetBrains 블로그의 C++ 관련 포스트도 유용합니다.
참고 자료
한 줄 요약: CLion으로 CMake 설정부터 디버깅·리팩토링·생산성까지, 크로스 플랫폼 C++ 개발을 체계적으로 진행할 수 있습니다.
관련 글
- C++ CLion 완벽 가이드 | 디버깅·리팩토링·단축키 [#53-1]
- C++ CLion 완벽 설정 가이드 | CMake·디버거·코드 분석·vcpkg·원격 개발 [#53-1]
- VS Code C++ 설정 | IntelliSense·빌드·디버깅
- C++ 디버깅 기초 완벽 가이드 | GDB·LLDB 브레이크포인트·워치포인트로 버그 5분 만에 찾기
- CMake 입문 | 수십 개 파일 컴파일할 때 필요한 빌드 자동화 (CMakeLists.txt 기초)