콘텐츠로 건너뛰기

[spdlog] 로그를 남겨보자 – 소스 빌드

spdlog는 C++용 고속 로깅 라이브러리입니다. 이는 헤더 전용 라이브러리로 설계 되었으며 라이브러리를 미리 컴파일하여 사용하거나 CMake를 통해 프로젝트에 포함할 수 있습니다. 여기서는 spdlog 소스를 다운로드 받고 CMake를 통해 spglog 소스 빌드 후 사용하는 방법에 대해서 설명하겠습니다.

개요

토이 프로젝트에서 아주 단순한 로그 라이브러리를 만들어 사용하고 있습니다. 사용하는 곳이 점차 많아지다 보니 자연스럽게 이런저런 기능을 추가해야 하는 상황이 자주 발생합니다. 처음에는 가볍고 심플하게 만들었으나 점차 무거워지다보니 그냥 오픈 소스 기반 라이브러리를 사용하자 해서 찾은 라이브러리 입니다.

토이 프로젝트에서 주로 사용하기 위한 용도로 아주 높은 성능이 필요하진 않기에 다음과 같은 항목을 고려하였습니다.

  • 쉽게 적용 가능
    • 다른 의존성이 없어야 함
    • 헤더만으로 사용 가능해야 함
  • 포맷 지정 가능
  • 특정 크기까지만 사용 가능
  • 비동기 및 멀티 스레드에 대한 고려가 되어 있어야 함

그리고 위 항목에 가장 적합한 라이브러리가 spdlog 였습니다.

spdlog 빌드

spdlog 소스 다운로드

GitHub에서 소스를 다운로드 받습니다. 직접 소스를 받아서 사용하거나 git clone 명령을 통해 저장소를 복제합니다.

저는 오픈 소스는 Git으로 관리하기 때문에 저장소를 복제하겠습니다.

# e:\OpenSourceLibrary\spdlog 에 복제
$ cd e:\OpenSourceLibrary
 
# git clone
$ git clone https://github.com/gabime/spdlog.git
Cloning into 'spdlog'...
remote: Enumerating objects: 27412, done.
remote: Counting objects: 100% (4010/4010), done.
remote: Compressing objects: 100% (322/322), done.
remote: Total 27412 (delta 3807), reused 3731 (delta 3675), pack-reused 23402
Receiving objects: 100% (27412/27412), 40.85 MiB | 16.87 MiB/s, done.
Resolving deltas: 100% (18496/18496), done.

CMake를 사용하여 빌드 프로젝트 생성

CMake를 사용하여 빌드 프로젝트를 생성합니다. CMake가 설치 되어있지 않다면 CMake를 먼저 설치해주세요.

저는 Visual Studio 2019를 사용하여 x86 및 x64 빌드를 수행하도록 하겠습니다.

# CMake를 사용하여 빌드 프로젝트 생성하기
$ cmake CMakeLists.txt -B [빌드 프로젝트 경로] -G [Generator] -A [Architecture]
 
# Visual Studio 2019 - x86
$ cmake CMakeLists.txt -B Build -G "Visual Studio 16 2019" -A Win32
 
# Visual Studio 2019 - x64
$ cmake CMakeLists.txt -B Build64 -G "Visual Studio 16 2019" -A x64

Build 및 Build64 폴더에 VS 2019 솔루션 파일을 확인할 수 있습니다.

CMake로 Build Project 생성

만약 다른 컴파일러로 빌드하고 싶다면 [Generator] 부분을 변경하면 됩니다.

cmake /? 명령을 통해 지원하는 Generator를 확인할 수 있습니다.

# MSVC Generators 예시
 
Visual Studio 17 2022 = Generates Visual Studio 2022 project files.
                        Use -A option to specify architecture.
Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
                        Use -A option to specify architecture.
Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                               Optional [arch] can be "Win64" or "ARM".
Visual Studio 10 2010 [arch] = Deprecated. Generates Visual Studio 2010 project files.
                               Optional [arch] can be "Win64" or "IA64".
Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.
                              Optional [arch] can be "Win64" or "IA64".

프로젝트 빌드 ( 정적 라이브러리 생성 )

이제 VS 2019로 정적 라이브러리를 만들어 보겠습니다. 저는 보통 플랫폼 및 구성에 맞게 총 8개의 정적 라이브러리를 만들어서 사용합니다. ( MD 및 MT / Debug 및 Release / x86 및 x64 )

MD Build
>> libspdlog_MD_2019_x86_v1.10.0.lib
>> libspdlog_MD_2019_x86D_v1.10.0.lib
>> libspdlog_MD_2019_x64_v1.10.0.lib
>> libspdlog_MD_2019_x64D_v1.10.0.lib

MT Build
>> libspdlog_MT_2019_x86_v1.10.0.lib
>> libspdlog_MT_2019_x86D_v1.10.0.lib
>> libspdlog_MT_2019_x64_v1.10.0.lib
>> libspdlog_MT_2019_x64D_v1.10.0.lib

VS 2019에서 Build 폴더 및 Build64 폴더에 있는 솔루션 파일을 열고 프로젝트의 대상 이름을 플랫폼 및 구성에 맞게 변경하고 빌드 합니다.

출력 폴더에 정적 라이브러리가 생성 된 것을 확인할 수 있습니다.

spdlog 빌드 결과

spdlog 라이브러리 참조

이제 console 프로젝트를 생성 후 spd 헤더 파일과 생성한 라이브러리를 사용하여 파일 로그를 남겨보겠습니다.

console 프로젝트 생성

간단하게 콘솔 애플리케이션에서 테스트를 해보겠습니다. 다음과 같이 프로젝트를 생성합니다.

spdlog 헤더 파일 및 라이브러리 복사

spdlog 소스 폴더에 있는 include 폴더와 정적 라이브러리를 프로젝트에 맞게 솔루션 내 적절한 위치에 복사합니다.

저는 다음과 같이 솔루션 파일이 있는 위치에 include 폴더와 lib 폴더를 생성하였습니다.

console 프로젝트에 참조 폴더 추가

프로젝트 속성 페이지에서 다음과 헤더 파일 및 라이브러리 폴더를 추가합니다.

테스트

이제 다음과 같이 main 함수 작성 후 실행 시 콘솔에서 로그가 정상적으로 보인다면 헤더와 라이브러리를 정상적으로 참조한 것입니다.

#include <iostream>
#include "spdlog/spdlog.h"
 
#pragma comment(lib, "libspdlog_MD_2019_x86D_v1.10.0.lib")
 
int main()
{
    spdlog::info("Hello World!\n");
 
    return 0;
}
[2022-07-16 16:09:24.870] [info] Hello World!

관련 포스트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다