라이브러리 명명 규칙 정리

라이브러리는 사용하는 환경이 다양하므로 적절한 이름을 붙이는 것 자체가 일이다. 다양한 환경을 명시적으로 표현한 복잡한 이름과 이름에는 드러나지 않으나 사용 환경을 암묵적인 약속으로 대신하는 단순한 이름 중 무엇을 선택하는 게 좋을까. 특정 환경에서만 사용한다면 명명 규칙은 극도로 단순하게 할 수 있다. 이름은 단순할수록 좋지만 모두가 내 맘과 같으란 법은 없으니 복잡해도 명시적인 표현을 선택하기로 한다. 적어도 어떻게 써야 하는지는 알 수 있을 테니까.

명명 규칙은 부스트 라이브러리 명명 규칙을 사용하기로 한다. 이름이 꽤 길어지지만 명확히 구분하기에 좋아 보인다. 최근 구글 테스트 라이브러리를 새로 빌드했을 때 만든 조건표를 예로 적어본다.

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
    • 스레딩 정보. 멀티 스레드 환경을 지원(/MT, /MTd, /MD, /MDd)하면 붙이며 지원하지 않으면 붙이지 않는다.
  • -us
    • 해당 라이브러리를 빌드할 때 사용한 옵션이며 해당하는 것만 붙인다.
    • u
      • 유니코드 문자 집합 사용

        라이브러리 빌드 옵션: u

        라이브러리 빌드 옵션: u

    • s
      • C/C++ 표준 라이브러리와 컴파일러 런타임 라이브러리를 정적 링크 (/MT, /MTd)

        라이브러리 빌드옵션: s

        라이브러리 빌드옵션: s

    • g
      • 디버그 버전 C/C++ 표준 라이브러리와 컴파일러 런타임 라이브러리 사용 (/MTd, /MDd)
        (라이브러리 빌드 옵션 s 참고)
    • d
      • 해당 라이브러리를 디버그 모드로 빌드

        라이브러리 빌드 옵션: d

        라이브러리 빌드 옵션: d

  • -1_7_0
    • 버전 정보. 버전 번호는 밑줄로 구분한다.
  • -x86
    • 지원 플랫폼. x86과 x64를 사용한다.
  • .lib
    • 확장자. 운영체제 관례에 따른다.

부스트 라이브러리 명명 규칙에서 y, p, n은 사용하지 않으며 u를 추가했다. 앞으로도 추가할 건 없어 보이지만 필요하면 빌드 옵션에 추가하는 걸로 충분할 듯하다.

Notes:
1. 멀티 스레드를 기본으로 사용하며 싱글 스레드는 지원하지 않는다.
멀티 스레드를 기본으로 사용하며 싱글 스레드는 지원하지 않는다.

You may also like...