4.6 KiB
4.6 KiB
헤드리스 프로젝트 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 프로젝트):
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<!-- 기본 프로젝트 디렉토리에서 pch.h 사용 -->
Vav2PlayerHeadless.vcxproj (헤드리스 프로젝트):
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>$(ProjectDir)headless;...</AdditionalIncludeDirectories>
<!-- headless 디렉토리에서 pch.h 사용 -->
헤드리스 PCH 내용
#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/패턴으로 공통 소스 참조 통일 - 단계적 활성화: 복잡한 파일들은 주석 처리하여 필요 시 활성화 가능
현재 활성 구성
<!-- 현재 사용 중 -->
<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로 생성됨