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)
) 에서 설정 가능.
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/ 디렉토리 사용 이유 :
include/
디렉토리를 헤더 파일 찾는 경로로 설정하므로, 빌드 프로세스에서 자동으로 찾아 감.lib/ 디렉토리 아래에는 정적 라이브러리 (static library) (.a, .lib) 혹은 동적 라이브러리 (dynamic library) (.so) 가 위치하고, 헤더 파일이 존재함. (헤더 파일은 라이브러리의 인터페이스를 제공)