본문 바로가기
개발 기본 규칙 및 환경 설정

[개발 기본 규칙] C++ 프로젝트 구조

by cogito21_python 2024. 6. 8.
반응형

C++ 프로젝트의 구조를 잘 정의하는 것은 코드의 가독성과 유지보수성을 높이는 데 매우 중요합니다. 아래는 일반적인 C++ 프로젝트 구조와 관련된 규칙입니다.

프로젝트 디렉토리 구조

  1. src/: 소스 파일을 저장하는 디렉토리
  2. include/: 헤더 파일을 저장하는 디렉토리
  3. lib/: 외부 라이브러리 파일을 저장하는 디렉토리
  4. bin/: 컴파일된 실행 파일을 저장하는 디렉토리
  5. build/: 빌드 시스템이 생성한 파일을 저장하는 디렉토리
  6. test/: 테스트 코드를 저장하는 디렉토리
  7. docs/: 프로젝트 문서를 저장하는 디렉토리
  8. CMakeLists.txt: CMake 빌드 스크립트 파일
  9. README.md: 프로젝트에 대한 기본 정보를 제공하는 파일
  10. LICENSE: 라이선스 정보 파일

디렉토리 구조 예시

project/
│
├── src/
│   ├── main.cpp
│   ├── my_class.cpp
│   └── another_class.cpp
│
├── include/
│   ├── my_class.h
│   └── another_class.h
│
├── lib/
│   └── external_library/
│       ├── external_lib.h
│       └── external_lib.cpp
│
├── bin/
│   └── (compiled binaries)
│
├── build/
│   └── (build files)
│
├── test/
│   ├── test_main.cpp
│   ├── test_my_class.cpp
│   └── test_another_class.cpp
│
├── docs/
│   └── (documentation files)
│
├── CMakeLists.txt
├── README.md
└── LICENSE

CMakeLists.txt 예시

cmake_minimum_required(VERSION 3.10)
project(MyProject)

# C++ 표준 설정
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 헤더 파일 디렉토리 포함
include_directories(include)

# 소스 파일 지정
set(SOURCES
    src/main.cpp
    src/my_class.cpp
    src/another_class.cpp
)

# 실행 파일 생성
add_executable(MyProject ${SOURCES})

# 외부 라이브러리 링크
target_link_libraries(MyProject PRIVATE ${CMAKE_SOURCE_DIR}/lib/external_library)

각 디렉토리의 자세한 규칙

  1. src/:

    • 모든 소스 파일(.cpp)은 이 디렉토리에 위치합니다.
    • 소스 파일은 관련 있는 기능이나 클래스로 그룹화합니다.
    • 파일 이름은 소문자와 밑줄로 구분합니다.
    // src/my_class.cpp
    #include "my_class.h"
    
    void MyClass::my_method() {
        // method implementation
    }
  2. include/:

    • 모든 헤더 파일(.h 또는 .hpp)은 이 디렉토리에 위치합니다.
    • 소스 파일과 동일한 이름의 헤더 파일을 만듭니다.
    • 파일 이름은 소문자와 밑줄로 구분합니다.
    // include/my_class.h
    #ifndef MY_CLASS_H
    #define MY_CLASS_H
    
    class MyClass {
    public:
        void my_method();
    };
    
    #endif // MY_CLASS_H
  3. lib/:

    • 외부 라이브러리와 관련된 파일들을 이 디렉토리에 위치합니다.
    • 외부 라이브러리의 헤더 파일과 소스 파일을 적절히 관리합니다.
  4. bin/:

    • 빌드된 실행 파일을 이 디렉토리에 위치합니다.
    • 빌드 시스템(CMake, Makefile 등)에서 자동으로 이 디렉토리를 사용하도록 설정합니다.
  5. build/:

    • 빌드 시스템(CMake, Makefile 등)에서 생성된 임시 파일들이 위치합니다.
    • 이 디렉토리는 버전 관리 시스템(git 등)에서 제외(.gitignore)합니다.
  6. test/:

    • 모든 테스트 코드(.cpp)는 이 디렉토리에 위치합니다.
    • 각 소스 파일에 대해 대응되는 테스트 파일을 만듭니다.
    • 테스트 프레임워크(예: Google Test, Catch2 등)를 사용하여 테스트 코드를 작성합니다.
    // test/test_my_class.cpp
    #include "gtest/gtest.h"
    #include "my_class.h"
    
    TEST(MyClassTest, MethodTest) {
        MyClass obj;
        EXPECT_TRUE(obj.my_method());
    }
  7. docs/:

    • 프로젝트와 관련된 모든 문서는 이 디렉토리에 위치합니다.
    • 문서 파일 형식은 Markdown(.md) 또는 텍스트 파일(.txt)을 사용합니다.
  8. README.md:

    • 프로젝트의 개요, 설치 방법, 사용 방법, 기여 방법 등을 설명합니다.
    # MyProject
    
    ## Overview
    This project is...
    
    ## Installation
    ```bash
    mkdir build
    cd build
    cmake ..
    make

    Usage

    ./bin/MyProject

    Contributing

    Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.

  9. LICENSE:

    • 프로젝트의 라이선스 정보를 명시합니다. (예: MIT License, Apache License 2.0 등)
    MIT License
    
    Copyright (c) 2024 MyProject
    
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:
    
    ...
반응형