110 lines
4.6 KiB
Markdown
110 lines
4.6 KiB
Markdown
# 헤드리스 프로젝트 PCH 아키텍처 개선
|
|
|
|
## ✅ **헤드리스 프로젝트 PCH 아키텍처 개선** (2025-09-21)
|
|
|
|
### **새로운 PCH 구조**
|
|
기존의 조건부 컴파일 방식에서 별도 디렉토리 기반 PCH로 개선하여 소스 코드 복잡성을 제거했습니다.
|
|
|
|
#### **구조 변경사항**
|
|
```
|
|
D:\Project\video-av1\vav2\Vav2Player\Vav2Player\
|
|
├── pch.h / pch.cpp # WinUI3 GUI용 PCH (기존)
|
|
├── headless/ # 🆕 헤드리스 전용 디렉토리
|
|
│ ├── pch.h # 헤드리스 전용 PCH
|
|
│ └── pch.cpp # PCH 생성 파일
|
|
└── src/ # 공통 소스 코드
|
|
└── **/*.cpp # 조건부 컴파일 제거 (#include "pch.h"만 사용)
|
|
```
|
|
|
|
#### **장점**
|
|
- **소스 코드 단순화**: 모든 .cpp 파일에서 `#include "pch.h"`만 사용
|
|
- **조건부 컴파일 제거**: `#ifdef HEADLESS_BUILD` 분기 처리 불필요
|
|
- **빌드 설정 단순화**: 프로젝트별 Include 경로로 pch.h 자동 선택
|
|
- **유지보수성 향상**: GUI/헤드리스 모드 간 의존성 완전 분리
|
|
|
|
#### **빌드 설정**
|
|
**Vav2Player.vcxproj** (GUI 프로젝트):
|
|
```xml
|
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
|
<!-- 기본 프로젝트 디렉토리에서 pch.h 사용 -->
|
|
```
|
|
|
|
**Vav2PlayerHeadless.vcxproj** (헤드리스 프로젝트):
|
|
```xml
|
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
|
<AdditionalIncludeDirectories>$(ProjectDir)headless;...</AdditionalIncludeDirectories>
|
|
<!-- headless 디렉토리에서 pch.h 사용 -->
|
|
```
|
|
|
|
#### **헤드리스 PCH 내용**
|
|
```cpp
|
|
#pragma once
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#define NOMINMAX
|
|
#include <windows.h>
|
|
#include <iostream>
|
|
// ... 표준 라이브러리
|
|
extern "C" { #include <dav1d.h> }
|
|
#include <mfapi.h> // Media Foundation (minimal)
|
|
#include <d3d12.h> // D3D12 (minimal)
|
|
#include "../src/Common/VideoTypes.h"
|
|
```
|
|
|
|
#### **검증 완료**
|
|
✅ **빌드 성공**: Vav2PlayerHeadless.vcxproj 빌드 완료
|
|
✅ **실행 확인**: 헤드리스 앱 정상 동작 확인
|
|
✅ **의존성 분리**: WinUI3 의존성 완전 제거
|
|
|
|
이제 헤드리스 프로젝트는 더 깔끔한 아키텍처로 관리되며, 향후 새로운 소스 파일 추가 시에도 조건부 컴파일 없이 바로 사용할 수 있습니다.
|
|
|
|
### **🗂️ 헤드리스 파일 재구성** (2025-09-21)
|
|
|
|
헤드리스 관련 모든 파일을 `headless/` 디렉토리로 통합하여 더욱 체계적인 프로젝트 구조를 구현했습니다.
|
|
|
|
#### **완료된 파일 재구성**
|
|
```
|
|
D:\Project\video-av1\vav2\Vav2Player\Vav2Player\headless\
|
|
├── pch.h # 헤드리스 전용 PCH 헤더
|
|
├── pch.cpp # PCH 생성 파일
|
|
├── SimpleHeadlessMain.cpp # ✅ 현재 사용 중인 메인 엔트리 포인트
|
|
├── HeadlessLauncher.cpp # 고급 헤드리스 런처 (예비)
|
|
├── HeadlessMain.cpp # 완전한 테스트 러너 (예비)
|
|
└── HeadlessDecoder.h/.cpp # 헤드리스 디코더 래퍼 (예비)
|
|
```
|
|
|
|
#### **장점**
|
|
- **명확한 구조**: 헤드리스 관련 모든 파일이 한 곳에 집중
|
|
- **독립성 강화**: GUI 프로젝트와 완전히 분리된 파일 관리
|
|
- **확장성**: 향후 헤드리스 기능 추가 시 동일 디렉토리에 배치
|
|
- **유지보수성**: 헤드리스 관련 작업 시 단일 디렉토리만 관리
|
|
|
|
#### **프로젝트 설정 업데이트**
|
|
- **Vav2PlayerHeadless.vcxproj**: 모든 헤드리스 파일 경로를 `headless\` 기준으로 수정
|
|
- **상대 경로 정리**: `../src/` 패턴으로 공통 소스 참조 통일
|
|
- **단계적 활성화**: 복잡한 파일들은 주석 처리하여 필요 시 활성화 가능
|
|
|
|
#### **현재 활성 구성**
|
|
```xml
|
|
<!-- 현재 사용 중 -->
|
|
<ClCompile Include="headless\SimpleHeadlessMain.cpp" />
|
|
|
|
<!-- 향후 필요 시 활성화 -->
|
|
<!-- <ClCompile Include="headless\HeadlessLauncher.cpp" /> -->
|
|
<!-- <ClCompile Include="headless\HeadlessMain.cpp" /> -->
|
|
<!-- <ClCompile Include="headless\HeadlessDecoder.cpp" /> -->
|
|
```
|
|
|
|
#### **빌드 및 테스트 확인**
|
|
✅ **빌드 성공**: 재구성된 파일들로 정상 빌드 완료
|
|
✅ **실행 확인**: `Vav2PlayerHeadless.exe` 정상 동작
|
|
✅ **구조 검증**: 모든 헤드리스 파일이 적절한 위치에 배치
|
|
|
|
이제 헤드리스 관련 모든 작업이 단일 디렉토리에서 체계적으로 관리되며, 프로젝트 구조가 더욱 명확해졌습니다.
|
|
|
|
|
|
---
|
|
|
|
*최종 업데이트: 2025-09-21*
|
|
*Claude Code로 생성됨* |