C++ 문서화 도구 완벽 가이드 | Doxygen·Sphinx

C++ 문서화 도구 완벽 가이드 | Doxygen·Sphinx

이 글의 핵심

C++ API 문서 자동화: Doxygen 설정, Sphinx·Breathe·Exhale 통합, Doxyfile 작성, GitHub Actions로 GitHub Pages 배포. 자주 발생하는 에러·베스트 프랙티스·프로덕션 패턴까지 실전 예제로 다룹니다.

들어가며: “API 문서가 코드와 항상 어긋나요”

실제 겪는 문제 시나리오

시나리오 1: 수동 문서 유지보수 지옥

"헤더 파일을 수정했는데 README의 API 설명을 깜빡했어요."
"함수 시그니처가 바뀌었는데 문서는 예전 버전 그대로예요."
"새 팀원이 '이 함수가 뭐 하는 거예요?' 물어볼 때마다 코드를 직접 보여줘야 해요."

원인: 수동으로 작성한 문서는 코드 변경 시 동기화되지 않습니다. 주석·README·별도 문서가 따로 놀아 유지보수 비용이 급증합니다.

시나리오 2: 오픈소스 기여 시 문서 요구

"GitHub PR에 'API 문서를 추가해 주세요' 리뷰가 달렸어요."
"Doxygen 형식으로 주석을 달아야 한다고 하네요."
"문서 빌드가 CI에서 실패해서 머지가 안 돼요."

원인: 많은 오픈소스 프로젝트가 Doxygen·Sphinx 기반 문서화를 요구합니다. 형식 미준수·빌드 실패로 PR이 지연됩니다.

시나리오 3: 사용자 가이드와 API 레퍼런스 분리

"튜토리얼·개념 설명은 마크다운으로 쓰고, API 레퍼런스는 Doxygen으로 만들고 싶어요."
"두 개를 한 사이트에 합쳐서 배포하고 싶어요."
"Doxygen HTML만으로는 디자인이 밋밋해요."

원인: Doxygen은 API 문서에 강하지만 사용자 가이드·튜토리얼 작성에는 Sphinx가 유리합니다. 둘을 통합해야 합니다.

시나리오 4: CI/CD에서 문서 자동 배포

"main 브랜치에 머지될 때마다 문서를 자동으로 빌드·배포하고 싶어요."
"GitHub Pages에 올리려면 어떻게 해야 해요?"
"문서 빌드가 10분 넘게 걸려서 CI가 느려요."

원인: 문서 빌드·배포 파이프라인이 없거나 비효율적으로 구성되어 있습니다.

문서화 도구로 해결

문제해결
수동 문서 동기화Doxygen이 소스 주석에서 API 문서 자동 생성
주석 형식 통일Doxygen/Javadoc 스타일 주석 규칙 적용
가이드+API 통합Sphinx + Breathe/Exhale로 Doxygen XML 연동
자동 배포GitHub Actions로 빌드 후 GitHub Pages 푸시
flowchart LR
  subgraph Before["수동 문서 (Before)"]
    B1[코드 수정] --> B2[문서 수동 업데이트]
    B2 --> B3[동기화 누락]
    B3 --> B4[오래된 문서]
  end
  subgraph After["자동 문서화 (After)"]
    A1[소스 + Doxygen 주석] --> A2[Doxygen/Sphinx 빌드]
    A2 --> A3[HTML/PDF 생성]
    A3 --> A4[CI로 자동 배포]
  end

이 글에서 다루는 것

항목내용
DoxygenDoxyfile 설정, C++ 주석 스타일, HTML/XML 출력
Sphinx 통합Breathe, Exhale로 Doxygen XML → Sphinx 문서
완전한 예제헤더 전용·라이브러리·앱 프로젝트 문서화
자주 발생하는 에러경로 오류, 주석 파싱 실패, 링크 깨짐
베스트 프랙티스주석 규칙, 디렉터리 구조, 버전 관리
프로덕션 패턴GitHub Actions, GitHub Pages, 캐싱

요구 환경: Doxygen 1.9+, Python 3.8+ (Sphinx 시), CMake 3.15+ (선택), C++17 이상


실무 적용 경험: 이 글은 대규모 C++ 프로젝트에서 실제로 겪은 문제와 해결 과정을 바탕으로 작성되었습니다. 책이나 문서에서 다루지 않는 실전 함정과 디버깅 팁을 포함합니다.

목차

  1. 기본 개념: Doxygen vs Sphinx
  2. Doxygen 설정 및 사용
  3. Doxygen 주석 작성법
  4. Sphinx + Breathe + Exhale 통합
  5. 완전한 문서화 예제
  6. 자주 발생하는 에러와 해결법
  7. 베스트 프랙티스
  8. 프로덕션 패턴: CI/CD·GitHub Pages
  9. 구현 체크리스트

1. 기본 개념: Doxygen vs Sphinx

도구 비교

도구강점약점적합한 용도
DoxygenC++ 네이티브, 주석 파싱, 자동 API 문서사용자 가이드 작성 부족, 디자인 제한API 레퍼런스, C/C++ 전용
SphinxreStructuredText, 사용자 가이드, 테마 풍부C++ 파싱은 Doxygen 의존튜토리얼, 개념 설명, Python
BreatheDoxygen XML → Sphinx 디렉티브수동 디렉티브 작성 필요Sphinx에 API 문서 삽입
ExhaleBreathe 기반, 자동 계층 생성대규모 프로젝트 시 느림중소형 C++ 라이브러리

도구 선택 가이드

flowchart TD
    A[문서화 필요] --> B{사용자 가이드 필요?}
    B -->|아니오| C[Doxygen 단독]
    B -->|예| D{Sphinx 경험 있음?}
    D -->|예| E[Sphinx + Breathe/Exhale]
    D -->|아니오| F[Doxygen + 별도 마크다운]
    C --> G[빠른 설정, HTML 출력]
    E --> H[통합 사이트, 테마 적용]
    F --> I[README + Doxygen 링크]
상황권장
API만 문서화Doxygen
튜토리얼 + APISphinx + Breathe
소규모 라이브러리, 자동 트리 원함Sphinx + Exhale
Python 프로젝트에 C++ 확장 문서Sphinx (기존 문서에 Breathe 추가)

문서화 파이프라인

flowchart TB
  subgraph source[소스]
    S1[header.h] --> S2[소스 주석]
  end
  subgraph doxygen[Doxygen]
    D1[파싱] --> D2[XML 출력]
    D2 --> D3[HTML 출력]
  end
  subgraph sphinx["Sphinx (선택)"]
    SP1["conf.py + Breathe"] --> SP2[Doxygen XML 읽기]
    SP2 --> SP3[reST + API]
    SP3 --> SP4[통합 HTML]
  end
  S1 --> D1
  D2 --> SP2
  SP4 --> GH[GitHub Pages]
  D3 --> GH

2. Doxygen 설정 및 사용

설치

# macOS (Homebrew)
brew install doxygen

# Ubuntu/Debian
sudo apt-get install doxygen graphviz

# Windows (vcpkg)
vcpkg install doxygen

# 버전 확인
doxygen --version

Doxyfile 생성

# 기본 Doxyfile 생성
doxygen -g

# 기존 Doxyfile에서 설정 생성
doxygen -g Doxyfile.custom

핵심 Doxyfile 설정

# Doxyfile 핵심 설정

# 프로젝트 정보
PROJECT_NAME           = "My C++ Library"
PROJECT_NUMBER         = "1.0.0"
PROJECT_BRIEF          = "고성능 C++ 유틸리티 라이브러리"

# 입력
INPUT                  = ./include ./src
FILE_PATTERNS          = *.h *.hpp *.cpp *.c
RECURSIVE              = YES
EXCLUDE                = ./build ./third_party

# 출력
OUTPUT_DIRECTORY       = ./docs/doxygen
GENERATE_HTML          = YES
GENERATE_LATEX         = NO
GENERATE_XML           = YES

# XML은 Sphinx(Breathe/Exhale) 통합 시 필수
GENERATE_XML           = YES
XML_OUTPUT             = xml

# C++ 관련
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_AS_DEFINED      = 
PREDEFINED             = __cplusplus=201703L DOXYGEN_SKIP

# 그래프 (선택, graphviz 필요)
HAVE_DOT               = YES

최소 동작 예제

# 프로젝트 구조
mkdir -p mylib/include mylib/src
cd mylib
doxygen -g
# Doxyfile 수정 후
doxygen
# docs/doxygen/html/index.html 생성

3. Doxygen 주석 작성법

C++ 주석 스타일

/**
 * @file config.h
 * @brief 설정 관리 클래스
 * @author pkglog
 * @date 2026-04-22
 * @version 1.0
 */

#ifndef MYLIB_CONFIG_H
#define MYLIB_CONFIG_H

#include <string>
#include <optional>

namespace mylib {

/**
 * @brief 애플리케이션 설정을 관리하는 클래스
 *
 * 설정 파일을 로드하고, 런타임에 값을 조회·수정합니다.
 * 스레드 안전하지 않습니다.
 */
class Config {
public:
    /**
     * @brief 설정 파일 경로로부터 설정 로드
     * @param path 설정 파일 경로 (JSON 또는 YAML)
     * @return 성공 시 true, 실패 시 false
     * @throws std::runtime_error 파일을 열 수 없을 때
     */
    bool load(const std::string& path);

    /**
     * @brief 키에 해당하는 문자열 값 조회
     * @param key 설정 키 (예: "server.host")
     * @return 값이 있으면 optional에 담아 반환, 없으면 nullopt
     */
    std::optional<std::string> get(const std::string& key) const;

    /**
     * @brief 설정 파일 경로 반환
     */
    const std::string& path() const noexcept { return path_; }

private:
    std::string path_;
};

}  // namespace mylib
#endif

함수 파라미터·반환값

/**
 * @brief 두 벡터의 내적을 계산
 * @param a 첫 번째 벡터
 * @param b 두 번째 벡터
 * @return 내적 값 (a·b)
 * @pre a.size() == b.size()
 */
double dot_product(const std::vector<double>& a,
                   const std::vector<double>& b);

/**
 * @brief 버퍼를 비동기로 전송
 * @param[in] data 전송할 데이터
 * @param[out] bytes_sent 실제 전송된 바이트 수 (반환 시 설정)
 * @param[in,out] context 연결 컨텍스트 (진행 시 업데이트됨)
 */
void send_async(const std::vector<uint8_t>& data,
                size_t* bytes_sent,
                ConnectionContext* context);

템플릿·매크로

/**
 * @tparam T 요소 타입 (기본 생성 가능해야 함)
 * @tparam Allocator 할당자 (기본: std::allocator<T>)
 */
template <typename T, typename Allocator = std::allocator<T>>
class Pool {
public:
    /**
     * @brief 풀에서 객체 할당
     * @return 할당된 객체 포인터
     */
    T* allocate();
};

/**
 * @def MYLIB_API
 * @brief DLL/공유 라이브러리 내보내기 매크로
 */
#ifdef _WIN32
#define MYLIB_API __declspec(dllexport)
#else
#define MYLIB_API __attribute__((visibility("default")))
#endif

그룹·모듈

/**
 * @defgroup network 네트워크
 * @brief 네트워크 관련 클래스와 함수
 */

/**
 * @class TcpClient
 * @ingroup network
 * @brief TCP 클라이언트
 */
class TcpClient { };

/**
 * @class UdpSocket
 * @ingroup network
 */
class UdpSocket { };

4. Sphinx + Breathe + Exhale 통합

설치

pip install sphinx breathe exhale sphinx-rtd-theme

conf.py 설정

# conf.py
import os
import subprocess

project = "My C++ Library"
copyright = "2026, pkglog"
author = "pkglog"
release = "1.0.0"

extensions = [
    "breathe",
    "exhale",
]

# Breathe: Doxygen XML 경로
breathe_projects = {
    "mylib": os.path.join(os.path.dirname(__file__), "..", "doxygen", "xml")
}
breathe_default_project = "mylib"

# Exhale: 자동 API 문서 생성
exhale_args = {
    "containmentFolder": "./api",
    "rootFileName": "library_root.rst",
    "rootFileTitle": "API Reference",
    "doxygenStripFromPath": "..",
    "createTreeView": True,
    "exhaleExecutesDoxygen": True,
    "exhaleDoxygenStdin": "INPUT = ../include"
}

Breathe만 사용 (수동)

.. index.rst
My Library Documentation
=======================

.. toctree::
   :maxdepth: 2

   tutorial
   api

.. api.rst
API Reference
=============

.. doxygenclass:: mylib::Config
   :members:
   :undoc-members:
   :protected-members:
   :private-members:

.. doxygenfunction:: mylib::dot_product

디렉터리 구조

docs/
├── conf.py
├── index.rst
├── tutorial.rst
├── doxygen/
│   ├── Doxyfile
│   └── xml/          # Doxygen XML 출력
└── _build/
    └── html/

5. 완전한 문서화 예제

예제 1: 헤더 전용 라이브러리

header-only-lib/
├── include/
│   └── mylib/
│       └── algorithm.hpp
├── Doxyfile
└── docs/
// include/mylib/algorithm.hpp
/**
 * @file algorithm.hpp
 * @brief 유틸리티 알고리즘
 */

namespace mylib {

/**
 * @brief 이진 탐색
 * @param first 시작 반복자
 * @param last 끝 반복자
 * @param value 찾을 값
 * @return 찾으면 해당 반복자, 없으면 last
 */
template <typename It, typename T>
It binary_search(It first, It last, const T& value) {
    // 구현...
    return last;
}

}
# Doxyfile (단순화)
INPUT = include
RECURSIVE = YES
GENERATE_LATEX = NO

예제 2: CMake 연동 문서 빌드

# CMakeLists.txt
find_package(Doxygen REQUIRED dot)

set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/docs)
set(DOXYGEN_GENERATE_HTML YES)
set(DOXYGEN_GENERATE_XML YES)
set(DOXYGEN_PROJECT_NAME "MyLib")

doxygen_add_docs(
    docs
    ${CMAKE_SOURCE_DIR}/include
    COMMENT "Generating API documentation"
)
cmake -B build
cmake --build build --target docs

예제 3: Exhale로 자동 API 트리 생성

# conf.py (Exhale 전체 설정)
exhale_args = {
    "containmentFolder": "./api",
    "rootFileName": "library_root.rst",
    "rootFileTitle": "API Reference",
    "doxygenStripFromPath": "..",
    "createTreeView": True,
    "exhaleExecutesDoxygen": True,
    "exhaleDoxygenStdin": """
INPUT = ../include
RECURSIVE = YES
GENERATE_XML = YES
XML_OUTPUT = xml
""",
    "treeViewIsBootstrap": True,
}
.. index.rst
Welcome to My Library
=====================

.. toctree::
   :maxdepth: 2

   tutorial
   api/library_root

예제 4: 전체 Doxyfile (실전용)

# Doxyfile 실전용

PROJECT_NAME           = "pkglog-core"
PROJECT_NUMBER         = "1.2.0"
PROJECT_BRIEF          = "고성능 C++ 코어 라이브러리"

INPUT                  = include src
FILE_PATTERNS          = *.h *.hpp *.cpp *.c
RECURSIVE              = YES
EXCLUDE                = build/ third_party/ test/
EXCLUDE_PATTERNS       = */detail/* */impl/*

OUTPUT_DIRECTORY       = docs
GENERATE_HTML          = YES
HTML_OUTPUT            = html
GENERATE_LATEX         = NO
GENERATE_XML           = YES
XML_OUTPUT             = xml

# 소스 브라우저
SOURCE_BROWSER         = YES
INLINE_SOURCES         = NO
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION    = YES

# 경고
QUIET                  = NO
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = NO
WARN_IF_DOC_ERROR      = YES

# C++17
PREDEFINED             = __cplusplus=201703L
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES

# 그래프
HAVE_DOT               = YES

6. 자주 발생하는 에러와 해결법

문제 1: “Could not find symbol” / 문서에 클래스가 안 나옴

원인: INPUT 경로 오류, FILE_PATTERNS 누락, RECURSIVE 미설정

해결법:

# ❌ 잘못된 설정
INPUT = include
RECURSIVE = NO

# ✅ 올바른 설정
INPUT = ./include ./src
FILE_PATTERNS = *.h *.hpp *.cpp *.c
RECURSIVE = YES

문제 2: “warning: documented symbol X was not declared” / 문서가 비어 있음

원인: 주석과 선언이 분리됨, @brief 누락, 네임스페이스 누락

해결법:

// ❌ 잘못된 예: 주석이 선언과 분리
// Config 클래스
class Config { };

// ✅ 올바른 예
/**
 * @brief Config 클래스
 */
class Config { };

문제 3: Sphinx에서 “breathe: could not find project” 에러

원인: Doxygen XML이 먼저 생성되지 않음, Breathe 경로 오류

해결법:

# 1. Doxygen 먼저 실행
cd docs && doxygen Doxyfile

# 2. conf.py 경로 확인
# breathe_projects[mylib] = "../doxygen/xml"  # 실제 경로
# conf.py
breathe_projects = {
    "mylib": os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "doxygen", "xml"))
}

문제 4: 매크로·전처리기로 인한 파싱 실패

원인: #ifdef로 감싼 코드가 Doxygen에서 제외됨

해결법:

// ❌ Doxygen이 파싱 안 함
#ifdef WIN32
void windows_only();
#endif

// ✅ PREDEFINED에 추가
// Doxyfile: PREDEFINED = WIN32
# Doxyfile
PREDEFINED = WIN32 __cplusplus=201703L

문제 5: 링크가 깨짐 (내부 링크, 외부 링크)

원인: GENERATE_TAGFILE 미설정, TAGFILES 경로 오류

해결법:

# 다른 프로젝트 문서 링크
GENERATE_TAGFILE = mylib.tag
TAGFILES = /path/to/other/docs/other.tag=https://other-docs.example.com/

문제 6: 한글 깨짐

원인: 인코딩 설정

해결법:

# Doxyfile
INPUT_ENCODING = UTF-8

문제 7: “exhale: Doxygen failed” / Exhale 빌드 실패

원인: Exhale가 Doxygen을 하위 프로세스로 실행할 때 경로·권한 문제

해결법:

# exhaleExecutesDoxygen = False로 두고, 수동으로 Doxygen 먼저 실행
exhale_args = {
    "exhaleExecutesDoxygen": False,
    # ...
}
# 빌드 스크립트에서 순서 보장
doxygen docs/Doxyfile
sphinx-build -b html docs docs/_build/html

문제 8: CMake에서 “Doxygen not found”

원인: find_package(Doxygen) 실패, graphviz 미설치

해결법:

# graphviz 없이도 동작하도록
find_package(Doxygen)
if(DOXYGEN_FOUND)
    set(DOXYGEN_HAVE_DOT NO)  # graphviz 없으면 비활성화
    doxygen_add_docs(...)
endif()

문제 9: 대용량 프로젝트에서 문서 빌드가 너무 느림

원인: 전체 소스 파싱, 그래프 생성 오버헤드

해결법:

# Doxyfile
HAVE_DOT = NO
# 또는
DOT_IMAGE_FORMAT = svg
# EXCLUDE로 불필요한 디렉터리 제외
EXCLUDE = test/ benchmark/ examples/

7. 베스트 프랙티스

주석 규칙

규칙설명
모든 public API 문서화클래스, 함수, 열거형에 @brief 필수
@param파라미터마다 설명
@return반환값 설명
@pre / @post전제조건·사후조건
@throws예외 발생 조건
@deprecated폐기 예정 API 표시

디렉터리 구조

project/
├── include/           # 공개 API
├── src/               # 구현
├── docs/
│   ├── Doxyfile
│   ├── doxygen/
│   └── sphinx/       # Sphinx 사용 시
├── .github/
│   └── workflows/
│       └── docs.yml
└── CMakeLists.txt

버전 관리

# Doxyfile
PROJECT_NUMBER = $(git describe --tags --always)
# 빌드 시 버전 주입
export PROJECT_VERSION=$(git describe --tags)
doxygen Doxyfile

문서화 제외

// 내부 구현·디테일은 문서화 제외
namespace detail {
    // @cond
    void internal_impl();  // Doxygen이 무시
    // @endcond
}
# Doxyfile
EXCLUDE = include/detail

8. 프로덕션 패턴: CI/CD·GitHub Pages

GitHub Actions: Doxygen 문서 배포

# .github/workflows/docs.yml
name: Build and Deploy Documentation

on:
  push:
    branches: [main]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  build-docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Doxygen
        run: sudo apt-get update && sudo apt-get install -y doxygen graphviz

      - name: Build Doxygen
        run: doxygen Doxyfile

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: docs/html

GitHub Pages 설정

# 동일 워크플로에 추가
jobs:
  deploy:
    needs: build-docs
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deploy.outputs.page_url }}
    steps:
      - name: Deploy to GitHub Pages
        id: deploy
        uses: actions/deploy-pages@v4

Sphinx + Doxygen 통합 빌드

# .github/workflows/docs-sphinx.yml
- name: Set up Python
  uses: actions/setup-python@v5
  with:
    python-version: '3.11'

- name: Install dependencies
  run: pip install sphinx breathe exhale sphinx-rtd-theme

- name: Build Doxygen XML
  run: doxygen docs/Doxyfile

- name: Build Sphinx
  run: cd docs && sphinx-build -b html . _build/html

- name: Upload artifact
  uses: actions/upload-pages-artifact@v3
  with:
    path: docs/_build/html

캐싱으로 빌드 시간 단축

- name: Cache Doxygen
  uses: actions/cache@v4
  with:
    path: docs/doxygen/xml
    key: doxygen-${{ hashFiles('include/**', 'src/**') }}

문서 버전별 배포 (태그/브랜치)

# main → latest, v* 태그 → 해당 버전
- name: Set docs path
  run: |
    if [[ $GITHUB_REF == refs/tags/* ]]; then
      echo "DOCS_PATH=docs/${{ github.ref_name }}" >> $GITHUB_ENV
    else
      echo "DOCS_PATH=docs/latest" >> $GITHUB_ENV
    fi

Read the Docs 연동 (대안)

# .readthedocs.yml
version: 2
build:
  os: ubuntu-22.04
  tools:
    python: "3.11"
  jobs:
    post_checkout:
      - pip install sphinx breathe exhale
    post_install:
      - doxygen docs/Doxyfile
sphinx:
  configuration: docs/conf.py
  fail_on_warning: false

로컬 문서 미리보기

# Doxygen HTML 로컬 서버
cd docs/html && python -m http.server 8000

# Sphinx HTML
cd docs/_build/html && python -m http.server 8000

9. 구현 체크리스트

Doxygen 단독 사용

  • doxygen -g로 Doxyfile 생성
  • INPUT, RECURSIVE, FILE_PATTERNS 설정
  • GENERATE_HTML, GENERATE_XML 설정
  • PREDEFINED__cplusplus 등 추가
  • public API에 @brief, @param, @return 주석
  • EXCLUDE로 빌드·테스트 디렉터리 제외

Sphinx 통합

  • pip install sphinx breathe exhale
  • conf.pybreathe_projects, exhale_args 설정
  • Doxygen XML 먼저 생성
  • sphinx-build 실행

CI/CD

  • GitHub Actions 워크플로 작성
  • actions/upload-pages-artifact 사용
  • actions/deploy-pages로 GitHub Pages 배포
  • (선택) Doxygen XML 캐시

품질

  • WARN_IF_DOC_ERROR = YES
  • WARN_IF_UNDOCUMENTED = NO (점진적 적용)
  • 버전 번호 자동 주입

정리

항목설명
DoxygenC++ API 문서 자동 생성, Doxyfile로 설정
Sphinx사용자 가이드·튜토리얼, Breathe/Exhale로 API 통합
주석@brief, @param, @return 등 Javadoc 스타일
CI/CDGitHub Actions로 빌드·GitHub Pages 배포

핵심 원칙:

  1. 코드와 문서를 한 곳(소스 주석)에서 관리
  2. 모든 public API에 최소한 @brief 문서화
  3. Doxygen 단독 vs Sphinx 통합은 프로젝트 규모·요구에 따라 선택
  4. CI에서 문서 빌드·배포 자동화

자주 묻는 질문 (FAQ)

Q. 이 내용을 실무에서 언제 쓰나요?

A. 오픈소스 프로젝트, 팀 협업, API 문서 유지보수, 온보딩 자료, 라이브러리 배포 시 활용합니다. Doxygen 단독 또는 Sphinx 통합으로 선택해 적용하면 됩니다.

Q. 선행으로 읽으면 좋은 글은?

A. 각 글 하단의 이전 글 링크를 따라가면 순서대로 배울 수 있습니다. C++ 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.

Q. 더 깊이 공부하려면?

A. Doxygen 공식 매뉴얼, Sphinx 문서, Breathe GitHub를 참고하세요. 글 말미의 참고 자료 링크도 활용하면 좋습니다.

한 줄 요약: Doxygen·Sphinx·API 문서 자동화를 마스터할 수 있습니다.


관련 글

  • C++ 정적 분석 도구 | Clang-Tidy·Cppcheck·SonarQube [#53-5]
  • C++ 코드 리뷰 |
... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3