회사에서 기존 CMake기반의 개발 환경에, conan을 도입해보는 업무를 맡았다
부끄럽지만 기존에 CMake를 써본 경험도, XCode IDE를 써본 경험도 없어서,
꽤나 많은 시행착오들이 있었는데, 이러한 과정을 간단하게 글로 포스팅해보고자 한다.
Conan이 뭔가요?
conan은 C/C++을 위한 패키지 관리자입니다.
외부 라이브러리나 의존성을 효과적으로 관리하고 프로젝트에 포함하는 것이 가능해집니다.
코난을 사용하면 어떤 점이 있는지, 정리해 보겠습니다.
기존 C/C++ 라이브러리 추가 플로우
필요한 라이브러리를 수동으로 다운로드받고, 빌드 환경에 맞게 수동으로 설정해주어야 했습니다.
헤더 위치를 지정해주고, 빌드에 포함할 디렉터리나, 라이브러리 파일을 직접 입력해주어야 합니다.
또한, 플랫폼이나 컴파일러에 종속적인 경우가 많아 이에 맞게끔 설정을 변경시켜주어야 했습니다.
코난을 사용한다면?
코난을 이용한다면, 공식 코난 리포지토리나 개인 리포지토리에서 라이브러리를 쉽게 가져올 수 있습니다.
conanfile.txt에 해당 라이브러리 이름과 버전을 명시하고,
CMake에서 `find_library`와 `add_target_library`를 하는 것만으로,
위에서 수동으로 해주어야 했던 모든 설정이 완료되고, 빌드가 바로 가능합니다.
또한, 버전 관리가 용이해집니다.
사내 라이브러리가 zlib 1.0을 사용하고, 다른 사내 엔진이 zlib 1.1을 사용한다면,
효과적으로 이를 관리하기 위해 고민할 부분이 많지만,
코난은 라이브러리 버전까지 관리를 명확하게 하기에, 이런 걱정을 덜을 수 있습니다.
Best binary management that saves developers and CI time and resources
위 문구가, 코난이 자체적으로 내세우는 코난의 한줄 설명입니다.
코난은 빌드 시의 'OS, 타겟 플랫폼, 컴파일러, 아키텍처' 까지 모두 관리합니다.
이를 통해서, 어떠한 라이브러리를 내 프로젝트에서 사용하고자 할 때,
소스 코드에서부터 빌드하지 않아도, 미리 저 설정대로 빌드된 바이너리가 있다면,
해당 바이너리를 그대로 사용할 수 있도록 해줍니다.
즉, 코난을 사용한다면,
라이브러리 세팅 시간 감소와, 버전 관리 공수 감소는 물론이고,
빌드 시간 감소까지도 기대할 수 있게 됩니다.
Conan 의 핵심 개념
레시피 (Recipe)
패키지의 빌드 및 의존성 정보를 정의하는 (파이썬) 스크립트입니다.
이 레시피를 통해 패키지의 다양한 속성을 설정할 수 있습니다.
해당 라이브러리가 빌드될 때의 여러 속성을 지정하거나,
이 라이브러리르 사용할 때 os와 arch에 따라 사용할 리소스를 분기시킬 수 있습니다.
패키지 (Package)
패키지는 레시피를 기반으로 빌드된 라이브러리 또는 응용 프로그램을 나타냅니다.
패키지는 패키지 레포지토리에서 이름/버전/유저/채널별로 관리되고,
로컬에 다운로드되면 캐시로 사용되어, 재사용할 수 있게 됩니다.
프로필 (Profile)
프로필은 특정 빌드 환경을 설정하는데 사용됩니다.
이를 통해 플랫폼, 컴파일러, 라이브러리 버전 등을 정의할 수 있습니다.
예를 들어, 아래처럼 프로필을 정의할 수 있습니다.
[settings]
os=Linux
compiler=gcc
compiler.version=10
[options]
my_option=True
위처럼, Linux OS에서 gcc 10버전으로 빌드하고, my_option 값을 True로 설정하는,
빌드 환경을 지정하기 위해 프로필이 사용됩니다.
CMake를 호출 시에, 타겟 os 및 platform별로 인자를 분기하여 달리 주지 않아도,
프로필을 지정해주는 것만으로도 해결되는 것입니다.
'연구한 이야기 > 맡은 업무 이야기' 카테고리의 다른 글
드로우콜을 낮춰보자 (0) | 2024.09.01 |
---|---|
게임 서버 로그 처리하기 (0) | 2024.04.14 |
ASTC 포맷, 어떤 점이 왜 좋을까? (0) | 2024.01.28 |
Prometheus + Grafana 패키징 (0) | 2024.01.19 |
텍스처 압축과 ASTC (3) | 2024.01.14 |