C++ standard, 프로젝트 구조

규규·2024년 2월 4일
0

C++

목록 보기
5/21

C++ 표준

  • C++ Standard :
    The current ISO (International Organization for Standardization, 국제 표준화 기구) C++ standard is officially known as ISO International Standard ISO/IEC 14882:2020(E) – Programming Language C++.

  • ISO : 국제 표준을 관리하고 재정하는 비정부 기구, 165개 이상의 회원 국가 참여, 1947년 설립

  • ANSI : American National Standards Institute, 미국 산업 표준 제정 민간단체, ISO 에 가입되어 있음. ANSI 및 other national 당국이 ISO 에 참여하여 C++ standard 설정함.

  • C++ 표준은 국제적으로 정해지기 때문에, 여러 기업과 개발자 커뮤니티가 공통적으로 따르며, 이를 준수하는 컴파일러들이 많이 사용 됨. 최초 표준은 1998년에 ISO/IEC 14882:1998 로 출판. 23년 2월에 C++ 23 표준까지 발표 됨.

  • C++ standard 는 일반적으로 backward compatible. 단, 새로 추가된 std library등 forward compatible 는 안되는 경우 존재 함. gcc option(-std=c++17) 이나 CMakeLists.txt (set(CMAKE_CXX_STANDARD 14)) 에서 설정 가능.

출처 :
https://stackoverflow.com/questions/4326045/is-new-c-backward-compatible#:~:text=All%20version%20of%20C%2B%2B%20should,has%20not%20yet%20been%20decided).

C++ 프로젝트 구조 표준

  • C++ 프로젝트 구조 표준은 특정한 표준화 기구에서 정해지는 건 아니고, 각 조직 별 가이드 라인에 따라서 정해 짐
  • 단, OpenStandards 에서 (여러 표준의 원친을 권장하는 운동) 기술해둔 일반적인 C++ 프로젝트 구조 (Canonical Project Structure) 가 있음 (https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1204r0.html)
  project-root/
|-- include/
|   |-- project-name/
|       |-- header1.hpp
|       |-- header2.hpp
|-- src/
|   |-- source1.cpp
|   |-- source2.cpp
|-- test/
|   |-- test1.cpp
|   |-- test2.cpp
|-- lib/
|   |-- third-party-library1/
|       |-- include/
|       |-- lib/
|   |-- third-party-library2/
|       |-- include/
|       |-- lib/
|-- bin/
|   |-- executable1
|   |-- executable2
|-- CMakeLists.txt
|-- README.md
|-- LICENSE
  • include/: 헤더 파일들이 위치하는 디렉토리입니다.

  • src/: 소스 코드 파일들이 위치하는 디렉토리입니다.

  • test/: 테스트 코드 파일들이 위치하는 디렉토리입니다.

  • lib/: 외부 라이브러리가 위치하는 디렉토리입니다.

  • bin/: 빌드된 실행 파일들이 위치하는 디렉토리입니다.

  • CMakeLists.txt: CMake 프로젝트 설정 파일입니다.

  • README.md: 프로젝트에 대한 설명이나 문서가 포함된 파일입니다.

  • LICENSE: 프로젝트의 소프트웨어 라이선스 정보가 담긴 파일입니다.

  • 위 구조는 CMake 와 같은 빌드 도구와 통합하기 쉬움

  • build/ 디렉토리는 주로 빌드 프로세스에서 생성되는 중간 결과물과 빌드에 필요한 파일들을 저장하는 디렉토리. (오브젝트 파일, 라이브러리, 종속성 파일, 기타 임시 파일) (보통 CMake 도 build 디렉토리 활용 함) (build 를 할 때 build 디렉토리를 만들고 거기서 빌드를 수행) (build 디렉토리 따로 만들면 깔끔하게 유지 할 수 있음)

  • include/ 디렉토리 사용 이유 :

    • header 파일 위치를 일관성 있게 유지하여 몇 가지 이점을 누림
      • 명확한 경로 : 헤더 파일 포함 시 경로가 명확해짐. `#include "project-name/header1.hpp"
      • 네임스페이스 및 구조 유지 : include/ 디렉토리 아래에는 프로젝트의 공개적인 API 를 형성하는 헤더 파일이 주로 위치. 이럼 외부 사용자들이 쉽게 접근 할 수 있는 인터페이스를 제공 가능
      • 프로젝트 관리 용이성 : 새로운 헤더 파일 추가하거나, 기존 헤더 파일 수정이 쉬움
      • 빌드 시스템 통합 : 일반적으로 빌드 시스템은 include/ 디렉토리를 헤더 파일 찾는 경로로 설정하므로, 빌드 프로세스에서 자동으로 찾아 감.
  • lib/ 디렉토리 아래에는 정적 라이브러리 (static library) (.a, .lib) 혹은 동적 라이브러리 (dynamic library) (.so) 가 위치하고, 헤더 파일이 존재함. (헤더 파일은 라이브러리의 인터페이스를 제공)

profile
복습용 저장소

0개의 댓글