CMake dependency

Woogie_·2024년 6월 26일

OpenGL

목록 보기
3/3

CMake를 이용한 외부라이브러리 사용하기

CMakeLists.txt에 다음을 추가

  • include 커맨드 : CMake에서 추가적인 기능을 사용할 때 사용하는 커맨드
  • ExternalProject : 실제 사용할 ExternalProject_Add 를 위함

spdlog 라이브러리 적용해보기

https://github.com/gabime/spdlog

  • ExternalProject_Add : 간단하게 관련 주소에 있는 옵션에 맞춰 CMake를 실행해준다

  • dep-spdlog : 컴파일할 때 대표되는 이름

  • GIT_REPOSITORY : 사용하려는 라이브러리의 깃 주소

  • GIT_TAG : 버전 체크

  • GIT_SHALLOW (ON/OFF) : 가장 최신의 코드만 다운을 받도록 설정 가능

  • UPDATE_COMMAND : 라이브러리를 최신버전으로 업데이트 하는 설정 가능

  • PATCH_COMMAND : 내가 다운 받은 커맨드를 수정할 수 있는 설정 가능

  • CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${} : CMake 인자를 설정하는 것

    • -D : Definition 변수 선언
    • CMAKE_ 로 시작하는 변수는 CMake가 특정해놓은 변수를 사용
    • CMAKE_INSTALL_PREFIX : 설치 디렉토리를 결정
  • TEST_COMMAND : 라이브러리를 자동테스트를 설정하고자 할 때 설정 가능

  • CMake.txt 파일이 변경될 경우 자동으로 CMake Configure가 실행된다

  • CMakeLists.txt에 다음을 추가

  • target_include_directories : target에 필요한 디렉토리를 포함하여 컴파일 해라

  • target_link_directories : target을 링크할 때 디렉토리를 포함시켜라 (링크가 올바르지 않을 경우 링크 에러 발생)

  • target_link_libraries : target을 링크할 때 어떤 라이브러리를 사용할 것인지 실제로 지정

  • add_dependencies : 의존성 리스트에 들어있는 프로젝트를 모두 컴파일 해야 CMake 프로젝트 컴파일 할 수 있다 (작성하지 않을 경우 빌드가 병렬로 실행되어 컴파일 에러 발생 가능)

spdlog 활용

  • 링크가 잘 되었을 경우 main.cpp를 수정하여 spdlog를 활용할 수 있다
#include <spdlog/spdlog.h>

int main(int argc, const char** argv) {
    SPDLOG_INFO("Hello, world!");
    return 0;
}

  • Compile 후 Ctrl + F5 디버그 할 경우 결과

CMake 파일 나눠서 관리하기

  • Dependency.cmake 파일을 생성
  • 앞의 CMake 추가 내용을 옮겨 넣기

  • CMakeLists.txt 파일에서 Dependency.cmake 불러오기

  • 빌드 후 실행해도 잘 실행된다

GLFW DEPENDENCY 추가하기

  • OpenGL은 3D 그래픽을 위한 API일 뿐

  • 화면에 그림을 그리기 위해서는 다음과 같은 작업이 추가적으로 필요함

    • 윈도우 생성하기 (당연히 OS에 따라 윈도우 생성 방식이 다름)
    • 윈도우에 OpenGL을 위한 surface 생성하고 연결하기
    • 키보드 / 마우스 입력 연결하기

GLFW

  • GLFW (https://www.glfw.org/)

    • Open-source, cross-platform library for
      • creating windows, contexts, and surfaces,
      • receiving input and events
  • Dependency.cmake에 다음을 추가 후 빌드

GLFW로 윈도우를 생성하기

  • CMakeLists.txt에 환경 변수 추가

  • 환경 변수를 predefined macro로 프로젝트에 추가

main.cpp 작성

  • SPDLOG_INFO : Log 확인

  • glifInit() : glfw 라이브러리를 초기화 (!glfInit()을 통해 실패 시 if문 실행 : 실패 사유가 로그에 찍히고 실행이 종료)

  • glfwCreateWindow() :

  • auto : 변수의 타입을 자동으로 지정해준다 (실제 window가 생성되면 GLFWwindow*)

  • glfwWindowShouldClose() :

  • glfwPollEvents() :

  • 빌드 후 결과 확인
    • 빈 화면의 윈도우가 생성
    • 윈도우 타이틀이 Hello, OpenGL!로 설정
    • 윈도우의 close 버튼을 누르면 프로그램 종료
    • Debug console에 SPDLOG_INFO()로 출력한 로그 내역이 나오는 것 확인


profile
상상을 구현하는 개발자

0개의 댓글