본문 바로가기
C++/C++ TIP

Visual Studio에서 C++ 프로젝트를 생성하면 일어나는 일

by GREEN나무 2025. 4. 3.
728x90

Visual Studio에서 C++ 프로젝트를 생성하면 기본적으로 다음과 같은 폴더 구조와 파일들이 생성됩니다.

 

각 폴더와 파일이 담당하는 역할.

MyProject/ 
├── MyProject.sln                 // 솔루션 파일: 여러 프로젝트를 하나의 솔루션으로 관리하는 파일
└── MyProject/                    // 실제 프로젝트 폴더
    ├── MyProject.vcxproj         // 프로젝트 파일: 빌드 설정, 컴파일러와 링커 옵션 등 프로젝트의 전체 설정 정보가 기록됨
    ├── MyProject.vcxproj.filters // 파일 필터 파일: Visual Studio 내에서 파일들을 그룹(예: "Source Files", "Header Files")으로 분류하여 보여주는 역할
    ├── Source Files/             // 소스 코드 폴더: .cpp 파일들이 위치하며, 실제 실행 코드가 작성됨
    │   └── main.cpp              // 기본 진입점 파일: 프로그램의 실행이 시작되는 곳 (예: main 함수 포함)
    ├── Header Files/             // 헤더 파일 폴더: 함수, 클래스 등의 선언 및 인터페이스 정의가 위치함 (.h 파일)
    │   └── MyProject.h           // 예제 헤더 파일: 선언문을 담아 소스 코드와 분리하여 관리
    └── Resource Files/           // 리소스 파일 폴더: 아이콘, 다이얼로그, 메뉴, 문자열 등 UI 및 기타 리소스를 관리하는 파일들 (.rc, .ico 등)
        └── MyProject.rc          // 리소스 스크립트 파일: 프로그램에 포함될 리소스를 정의

1. Visual Studio 폴더 구조와 파일 역할 🚀

  • 솔루션 파일 (.sln)
    • 역할: 여러 프로젝트를 하나의 솔루션으로 묶어 관리하며, 각 프로젝트의 경로 및 설정 정보를 포함합니다.
    • 의의: Visual Studio에서 전체 프로젝트를 한 번에 열어 관리할 수 있도록 돕습니다.
  • 프로젝트 파일 (.vcxproj)
    • 역할: XML 형식으로 작성되어 빌드 설정, 컴파일러와 링커 옵션, 포함 디렉터리, 라이브러리 링크 등의 정보를 담습니다.
    • 의의: 빌드 시 프로젝트의 전체 설정을 참조해 올바른 컴파일 및 링킹을 수행합니다.
  • 필터 파일 (.vcxproj.filters)
    • 역할: Visual Studio 내에서 파일들을 "Source Files", "Header Files" 등으로 그룹화하여 보기 쉽게 정리합니다.
    • 의의: 실제 파일 시스템 구조와 달리 IDE 내에서의 파일 분류를 돕습니다.
  • Source Files 폴더
    • 역할: .cpp 파일들이 위치하며, 프로그램의 실행 코드가 작성되는 곳입니다.
    • 예시: main.cpp는 프로그램의 시작점을 제공합니다.
  • Header Files 폴더
    • 역할: 함수, 클래스 등의 선언과 인터페이스를 정의하는 .h 파일들이 위치합니다.
    • 의의: 코드의 모듈화 및 재사용성을 높여 유지보수를 쉽게 만듭니다.
  • Resource Files 폴더
    • 역할: 아이콘, 다이얼로그, 메뉴, 문자열 등 UI 및 기타 리소스 파일들을 관리합니다.
    • 예시: .rc 파일은 프로그램에 포함될 리소스를 정의합니다.

 

2. 프로젝트 폴더 정리로 유지보수 용이하게 만드는 방법 🛠️

  • 모듈화 및 계층 구조 설정
    • 기능별 분리: 예를 들어, Core, UI, Data, Utils 등으로 폴더를 나누어 관리합니다.
    • 계층 구조: 상위 폴더 아래 세부 기능별 하위 폴더를 생성하여 전체적인 폴더 계층을 명확히 합니다.
  • 명확한 명명 규칙
    • 일관된 이름 사용: 모든 헤더 파일은 .h, 소스 파일은 .cpp 확장자를 사용하고, 테스트 관련 파일은 Test_ 접두어 등으로 표준화합니다.
    • 읽기 쉬운 구조: 폴더명과 파일명이 직관적이면 다른 개발자도 프로젝트 구조를 쉽게 이해할 수 있습니다.
  • 분리와 캡슐화
    • 헤더와 소스 분리: 모듈별로 헤더 파일과 소스 파일을 구분하거나, Include와 Src 폴더로 나눠 정리합니다.
    • 리소스 분리: 이미지, 아이콘, 설정 파일 등은 별도의 Resources 폴더로 관리합니다.
  • 테스트와 문서화 폴더 마련
    • 테스트 코드: 별도의 Tests 폴더에 단위 테스트 및 통합 테스트 파일을 보관합니다.
    • 문서화: API 문서, 코딩 가이드라인 등은 Docs 폴더에 저장해 프로젝트 이해도를 높입니다.
  • 버전 관리 시스템 활용
    • Git과 같은 버전 관리 시스템을 통해 파일 변경 이력을 관리하면, 문제 발생 시 이전 상태로 복구하기 쉽습니다. 😊

3. 솔루션 내 여러 프로젝트 구성 및 빌드 순서 관리 방법 🔄

  • 솔루션 내 여러 프로젝트 생성
    • Visual Studio에서 새로운 솔루션 생성 후, 솔루션 탐색기에서 "추가" → "새 프로젝트"를 선택하여 여러 프로젝트를 추가합니다.
    • 예시: CoreLibrary와 이를 사용하는 App 프로젝트를 구성하면, App 프로젝트에서 CoreLibrary에 대한 참조를 추가하는 방식으로 관리합니다.
  • 프로젝트 간 참조 설정
    • 솔루션 탐색기에서 프로젝트를 오른쪽 클릭 후 "참조 추가"를 통해 동일 솔루션 내 다른 프로젝트를 연결합니다.
  • 빌드 순서 설정
    • 빌드 순서 자동화: 솔루션 내 프로젝트 간 의존 관계에 따라 먼저 빌드되어야 할 프로젝트를 명시적으로 지정할 수 있습니다.
    • 자동화 도구 활용: MSBuild, CMake + Ninja/Makefile, CI/CD 도구 (Jenkins, Azure DevOps 등), PowerShell/Bash 스크립트를 이용하여 빌드 순서를 자동화할 수 있습니다.
      • MSBuild: .vcxproj 파일에서 의존성을 설정해 빌드 순서를 관리합니다.
      • CMake: 플랫폼 독립적인 빌드 시스템을 구축하여 Ninja나 Makefile과 연동, 빠른 빌드를 지원합니다.
      • CI/CD 도구: 소스 코드 변경 시 자동 빌드를 트리거하고, 빌드 순서를 스크립트나 설정 파일로 정의할 수 있습니다.

4. 빌드 순서를 효과적으로 관리하기 위한 자동화 도구와 스크립트

  1. MSBuild
    • Visual Studio의 기본 빌드 엔진인 MSBuild는 .vcxproj 파일 내에서 프로젝트 간 의존성을 설정할 수 있습니다. 이를 통해 솔루션 내 여러 프로젝트의 빌드 순서를 명시적으로 관리할 수 있습니다.
    • MSBuild 스크립트를 직접 작성하거나 수정하여, 복잡한 빌드 로직을 자동화할 수 있습니다.
    • MSBuild 공식 문서에서 자세한 정보를 확인할 수 있습니다.
  2. CMake + Ninja/Makefile
    • CMake는 플랫폼 독립적인 빌드 시스템 생성 도구로, 프로젝트의 소스 코드를 관리하고 프로젝트 간의 의존성을 설정할 수 있습니다.
    • CMake는 Ninja나 Makefile과 같은 빌드 도구와 연동되어, 빠르고 효율적인 빌드 순서 관리를 지원합니다.
    • CMake 공식 웹사이트에서 다양한 예제와 문서를 참고할 수 있습니다.
  3. CI/CD 도구 활용
    • Jenkins, Azure DevOps, GitLab CI/CD, TeamCity 등과 같은 CI/CD 도구를 사용하면, 빌드 파이프라인 내에서 여러 프로젝트의 빌드 순서를 자동화하고 통합 관리할 수 있습니다.
    • 이러한 도구들은 소스 코드 변경 시 자동 빌드를 트리거하고, 빌드 순서를 스크립트나 설정 파일로 정의할 수 있도록 지원합니다.
    • 각 도구의 공식 문서나 튜토리얼을 통해 단계별 설정 방법을 익힐 수 있습니다.
  4. PowerShell/Bash 스크립트
    • 간단한 경우라면, PowerShell이나 Bash 스크립트를 작성하여 여러 프로젝트의 빌드 명령어를 순차적으로 실행하는 방식으로 빌드 순서를 관리할 수도 있습니다.
    • 이 방법은 CI/CD 도구 없이도 로컬 환경에서 자동화된 빌드를 구현할 때 유용합니다.

이처럼 다양한 도구와 스크립트를 활용하면, 복잡한 프로젝트 내에서 빌드 순서를 명확하게 정의하고 자동화할 수 있습니다.

'C++ > C++ TIP' 카테고리의 다른 글

Visual Studio 단축키 정리표  (0) 2025.03.25
최상위문 체크  (0) 2025.02.09