콘텐츠로 건너뛰기

Windows 애플리케이션 솔루션 폴더 구조

Prologue

비상주로 Windows 애플리케이션 제작을 하는 경우 ( 특히 UI가 없는 배치 프로그램이나 에이전트 프로그램 ) Windows 애플리케이션과 콘솔 애플리케이션을 동시에 제작합니다.

UI가 없는 경우 프로그램 상태 및 데이터 처리 결과를 빠르게 파악하기 어렵습니다. 일반적으로 파일 로그나 서버로 전송된 로그로 파악해야 하는데, 이 경우 오류를 빠르게 인지하고 조치하기가 어렵습니다.

그래서 일반적으로 초기 버전 ~ 검증 단계까지는 콘솔 애플리케이션으로 제작하여 프로그램 상태 및 데이터 처리 결과를 빠르게 확인할 수 있도록 하고, 검증 완료 후 콘솔과 동일한 애플리케이션을 Windows 애플리케이션으로 제공합니다.

이번 포스팅에서는 Windows 애플리케이션과 콘솔 애플리케이션을 동시에 작업할 때 솔루션 구조에 대해서 간단하게 알아보도록 하겠습니다.

# 솔루션 폴더 구성

Visual Studio에서 콘솔 앱 프로젝트와 Windows 애플리케이션 프로젝트를 생성합니다.

각 프로젝트 폴더에서 Entry Point 함수를 처리하는 파일을 생성합니다. ( main() 또는 WinMain() 함수 )

실제 프로그램 코드는 프로젝트 폴더 하위에 존재하지 않고 두 개 프로젝트에서 공유할 수 있도록 솔루션 루트 폴더에 소스 폴더를 생성합니다.

그리고 각 프로젝트의 Entry Point 함수에서 초기화 작업을 수행하고 실제 수행해야 하는 EntryFunction()을 호출 합니다.

// File : main.cpp in Console application

// console app
int main()
{
  // log initialize - log level & logger
  spdlog::set_level(spdlog::level::trace);
  spdlog::flush_on(spdlog::level::info);

  // call entry function
  EntryFunction();

  return 0;
}
Code language: C++ (cpp)
// File : main.cpp in Windows desktop application project

// windows app
int APIENTRY wWinMain(HINSTANCE hInstance, 
                      HINSTANCE hPrevInstance, 
                      LPCWSTR lpCmdLine, 
                      int nCmdShow )
{
  UNREFERENCED_PARAMETER(hPrevInstance);
  UNREFERENCED_PARAMETER(lpCmdLine);

  // log initialize - log level & file logger
  auto file_logger = spdlog::rotating_logger_mt("whalec","log/whalec.log", 5242880, 3);

  spdlog::set_default_logger(file_logger);
  spdlog::set_level(spdlog::level::trace);
  spdlog::flush_on(spdlog::level::info);

  // call entry function
  EntryFunction();

  return 0;
}
Code language: C++ (cpp)
// File : EntryFunction.cpp in common source folder

void EntryFunction()
{
  // To Do Something
}
Code language: C++ (cpp)

그리고 [ 그림 1 ]과 같이 프로젝트 폴더와 동일한 레벨로 out 폴더와 third_party 폴더를 구성하고, 소스 폴더는 필요하다면 기능 또는 패키지 단위로 구성하여 폴더를 구성하면 됩니다.

그림 1. 솔루션 구성

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다