라이브러리 명명 규칙 정리
라이브러리는 사용하는 환경이 다양하므로 적절한 이름을 붙이는 것 자체가 일이다. 다양한 환경을 명시적으로 표현한 복잡한 이름과 이름에는 드러나지 않으나 사용 환경을 암묵적인 약속으로 대신하는 단순한 이름 중 무엇을 선택하는 게 좋을까. 특정 환경에서만 사용한다면 명명 규칙은 극도로 단순하게 할 수 있다. 이름은 단순할수록 좋지만 모두가 내 맘과 같으란 법은 없으니 복잡해도 명시적인 표현을 선택하기로 한다. 적어도 어떻게 써야 하는지는 알 수 있을 테니까.
명명 규칙은 부스트 라이브러리 명명 규칙을 사용하기로 한다. 이름이 꽤 길어지지만 명확히 구분하기에 좋아 보인다. 최근 구글 테스트 라이브러리를 새로 빌드했을 때 만든 조건표를 예로 적어본다.
Build Configuration |
Character Set | Runtime Library | |
Static Link | Dynamic Link | ||
Release | Unicode | libgtest-vc140-mt-us-1_7_0-x86.lib | libgtest-vc140-mt-u-1_7_0-x86.lib |
MBCS | libgtest-vc140-mt-s-1_7_0-x86.lib | libgtest-vc140-mt-1_7_0-x86.lib | |
Debug | Unicode | libgtest-vc140-mt-usgd-1_7_0-x86.lib | libgtest-vc140-mt-ugd-1_7_0-x86.lib |
MBCS | libgtest-vc140-mt-sgd-1_7_0-x86.lib | libgtest-vc140-mt-gd-1_7_0-x86.lib |
각 항목에 대한 설명은 다음과 같다.
- lib
- 접두어. 윈도우 환경에서는 정적 링크 라이브러리에만 붙이며 임포트 라이브러리와 DLL에는 붙이지 않는다. 런타임 라이브러리를 정적, 동적으로 링크한 것과는 다르니 주의한다.
- gtest
- 라이브러리 이름.
- -vc140
- 툴셋 정보. 라이브러리를 빌드할 때 사용한 툴셋과 버전을 나타낸다.
-mt- -us
- 해당 라이브러리를 빌드할 때 사용한 옵션이며 해당하는 것만 붙인다.
- u
- 유니코드 문자 집합 사용
- s
- C/C++ 표준 라이브러리와 컴파일러 런타임 라이브러리를 정적 링크 (/MT, /MTd)
- g
- 디버그 버전 C/C++ 표준 라이브러리와 컴파일러 런타임 라이브러리 사용 (/MTd, /MDd)
(라이브러리 빌드 옵션 s 참고)
- 디버그 버전 C/C++ 표준 라이브러리와 컴파일러 런타임 라이브러리 사용 (/MTd, /MDd)
- d
- 해당 라이브러리를 디버그 모드로 빌드
- -1_7_0
- 버전 정보. 버전 번호는 밑줄로 구분한다.
- -x86
- 지원 플랫폼. x86과 x64를 사용한다.
- .lib
- 확장자. 운영체제 관례에 따른다.
부스트 라이브러리 명명 규칙에서 y, p, n은 사용하지 않으며 u를 추가했다. 앞으로도 추가할 건 없어 보이지만 필요하면 빌드 옵션에 추가하는 걸로 충분할 듯하다.