반응형
C++ 프로젝트의 구조를 잘 정의하는 것은 코드의 가독성과 유지보수성을 높이는 데 매우 중요합니다. 아래는 일반적인 C++ 프로젝트 구조와 관련된 규칙입니다.
프로젝트 디렉토리 구조
- src/: 소스 파일을 저장하는 디렉토리
- include/: 헤더 파일을 저장하는 디렉토리
- lib/: 외부 라이브러리 파일을 저장하는 디렉토리
- bin/: 컴파일된 실행 파일을 저장하는 디렉토리
- build/: 빌드 시스템이 생성한 파일을 저장하는 디렉토리
- test/: 테스트 코드를 저장하는 디렉토리
- docs/: 프로젝트 문서를 저장하는 디렉토리
- CMakeLists.txt: CMake 빌드 스크립트 파일
- README.md: 프로젝트에 대한 기본 정보를 제공하는 파일
- 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)
각 디렉토리의 자세한 규칙
src/:
- 모든 소스 파일(.cpp)은 이 디렉토리에 위치합니다.
- 소스 파일은 관련 있는 기능이나 클래스로 그룹화합니다.
- 파일 이름은 소문자와 밑줄로 구분합니다.
// src/my_class.cpp #include "my_class.h" void MyClass::my_method() { // method implementation }
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
lib/:
- 외부 라이브러리와 관련된 파일들을 이 디렉토리에 위치합니다.
- 외부 라이브러리의 헤더 파일과 소스 파일을 적절히 관리합니다.
bin/:
- 빌드된 실행 파일을 이 디렉토리에 위치합니다.
- 빌드 시스템(CMake, Makefile 등)에서 자동으로 이 디렉토리를 사용하도록 설정합니다.
build/:
- 빌드 시스템(CMake, Makefile 등)에서 생성된 임시 파일들이 위치합니다.
- 이 디렉토리는 버전 관리 시스템(git 등)에서 제외(.gitignore)합니다.
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()); }
docs/:
- 프로젝트와 관련된 모든 문서는 이 디렉토리에 위치합니다.
- 문서 파일 형식은 Markdown(.md) 또는 텍스트 파일(.txt)을 사용합니다.
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.
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: ...
반응형
'개발 기본 규칙 및 환경 설정' 카테고리의 다른 글
[개발 기본 규칙] Python 프로젝트 구조 (1) | 2024.07.03 |
---|---|
[기본 규칙] Python 코딩 컨벤션 (0) | 2024.07.03 |
[환경설정] Python 환경설정 (0) | 2024.07.03 |