사용자 도구

사이트 도구


raylib:install:리눅스_환경에서_raylib_설치하기
리눅스 환경에서 raylib 설치하기

문서의 이전 판입니다!


서문

Linux 환경에서 Raylib를 설치하고 Makefile과 VS Code의 환경 설정하는 법에 대해 설명하려고 한다.

Linux는 데비안계열(우분투)을 기준으로 하였다1).

어차피 패키지 매니링 명령어의 경우 데비안 계열에서 'apt'가 arch 계열에서는 'pacman'으로 이름만 바뀌는 정도이니 데비안 계열이 아니더라도 크게 혼란은 없을 것이다.

환경 설정

리눅스에서 c나 c++을 사용할 수 있는 컴파일러가 설치되어야 있어야 한다.

어차피 대부분의 배포란 리눅스에는 설치되어 있지만, 혹시 모르니 다음 명령어를 터미널에서 입력하여 설치 여부를 확인하자

sudo apt update
sudo apt install build-essential git
sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev

Raylib 설치하기

1. Raylib 복사하기

Git 리포지토리에서 일단 Raylib를 복하자. 최상단 폴더에서 raylib를 설치하겠다.

cd ~
git clone https://github.com/raysan5/raylib.git raylib

2. Raylib 컴파일 하기

이에 raylib폴더 중에 src 폴더에 들어가서 src폴더 내에 있는 makefile을 실행시키자.

cd raylib/src/
make PLATFORM=PLATFORM_DESKTOP
sudo make install

참고로 src폴더 내에 있는 makefile을 보면, 다음의 경로가 있다.

# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
DESTDIR ?= /usr/local
RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include

즉, 컴파일한 라이브러리는 /usr/local/lib에 들어 있음을 알 수 있다.

Makefile 만들기

1. 프로젝트 폴더

아무거나 Raylib를 사용한 간단한 c혹은 c++ 프로그램을 만들자

/raylib/example/core 폴더에 있는 core_basic_window.c를 써도 된다2).

그런데 cpp를 이용할 것이므로 이 보다는 OOP 형태로 만들어진 예제를 이용하자.

Raylib Template File

내가 전에 작성한 글인 VS코드에서 Raylib CPP환경 설정하기를 참고하자

2. 상수 설정하기

makefile에서 사용할 상수(constant)를 설정하자. 주로 경로에 대해서 설정하면 된다.

# Define required raylib variables
PROJECT_NAME          ?= raylib_hello
RAYLIB_VERSION        ?= 5.5.0
RAYLIB_PATH           ?= /home/(UserName)/raylib
 
# Define raylib source code path
RAYLIB_SRC_PATH       ?= /home/(UserName)/raylib/src
 
# Locations of raylib.h and libraylib.a/libraylib.so
# NOTE: Those variables are only used for PLATFORM_OS: LINUX, BSD
DESTDIR               ?= /usr/local
RAYLIB_INCLUDE_PATH   ?= $(DESTDIR)/include
RAYLIB_LIB_PATH       ?= $(DESTDIR)/lib
 
# Library type compilation: STATIC (.a) or SHARED (.so/.dll)
RAYLIB_LIBTYPE        ?= STATIC
 
# Build mode for project: DEBUG or RELEASE
BUILD_MODE            ?= RELEASE 
 
# Define raylib release directory for compiled library
RAYLIB_RELEASE_PATH    ?= $(RAYLIB_PATH)/src

git을 통해 복사한 Raylib 코드는 우리가 아까 'cd ~'을 통해 홈의 루트에 설치했다.

따라서 탐색기에서 HOME에 가면 'raylib'폴더가 설치된 것을 알 수 있다.

이 위치는 '/home/(UserName)/raylib'이다. 여기서 (UserName)은 리눅스에서 사용자가 설정한 사용자 이름을 말한다.

그리고 아까 /raylib/src 폴더에서 make를 통해 컴파일한 라이브러리는 '/usr/local'에 설치되었다고 하였다.

이를 DESTDIR로 설정하면 된다.

3. 컴파일러와 메이크 파일 설정

우리는 c가 아니라 c++을 사용할 것이므로 컴파일러는 g++을 이용할 것이다.

따라서 gcc를 g++로 바꿔주자

# Define default C compiler: CC
#------------------------------------------------------------------------------------------------
CC = g++
 
 
# Define default make program: MAKE
#------------------------------------------------------------------------------------------------
MAKE ?= make

4. 컴파일러 플래그 옵션 설정

플래그 옵션은 다음과 같이 설정하면 된다.

참고로 윈도우에서는 아이콘을 만드는게 가능한데, 리눅스에서는 어떻게 만드는지 아직 모르겠다.

# Define compiler flags: CFLAGS
#------------------------------------------------------------------------------------------------
#  -O1                  defines optimization level
#  -g                   include debug information on compilation
#  -s                   strip unnecessary data from build
#  -Wall                turns on most, but not all, compiler warnings
#  -std=c99             defines C language mode (standard C from 1999 revision)
#  -std=gnu99           defines C language mode (GNU C from 1999 revision)
#  -Wno-missing-braces  ignore invalid warning (GCC bug 53119)
#  -Wno-unused-value    ignore unused return values of some functions (i.e. fread())
#  -D_DEFAULT_SOURCE    use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
CFLAGS = -Wall -std=c++14 -Wno-missing-braces 
 
ifeq ($(BUILD_MODE),DEBUG)
    CFLAGS += -g  -O0
else
    CFLAGS += -s -O1
endif
 
# Additional flags for compiler (if desired)
#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
    ifeq ($(PLATFORM_OS),WINDOWS)
        # resource file contains windows executable icon and properties
        # -Wl,--subsystem,windows hides the console window
        CFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data
    endif
    ifeq ($(PLATFORM_OS),LINUX)
        ifeq ($(RAYLIB_LIBTYPE),STATIC)
            CFLAGS += -D_DEFAULT_SOURCE
        endif
        ifeq ($(RAYLIB_LIBTYPE),SHARED)
            # Explicitly enable runtime link to libraylib.so
            CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
        endif
    endif
endif

5. 헤더파일과 라이브러리 파일 연결하기

컴파일 옵션에 다음을 추가하여 헤더파일과 라이브러리 파일을 연결한다.

# Define include paths for required headers: INCLUDE_PATHS
# NOTE: Some external/extras libraries could be required (stb, easings...)
#------------------------------------------------------------------------------------------------
INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external $(EXTRA_INCLUDE_PATHS)
 
# Define library paths containing required libs: LDFLAGS
#------------------------------------------------------------------------------------------------
LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src

리눅스 데스크탑은 윈도우와 마찬가지로 GLFW (Open GL Library)를 이용한다.

따라서 라이브러리 연결은 다음과 같은 플래그를 추가해야 한다.

# Define libraries required on linking: LDLIBS
# NOTE: To link libraries (lib<name>.so or lib<name>.a), use -l<name>
#------------------------------------------------------------------------------------------------
ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW)
    ifeq ($(PLATFORM_OS),WINDOWS)
        # Libraries for Windows desktop compilation
        # NOTE: WinMM library required to set high-res timer resolution
        LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
    endif
    ifeq ($(PLATFORM_OS),LINUX)
        # Libraries for Debian GNU/Linux desktop compiling
        # NOTE: Required packages: libegl1-mesa-dev
        LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
 
        # On X11 requires also below libraries
        LDLIBS += -lX11
        # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
        #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
 
        # Explicit link to libc
        ifeq ($(RAYLIB_LIBTYPE),SHARED)
            LDLIBS += -lc
        endif
        # NOTE: On ARM 32bit arch, miniaudio requires atomics library
        LDLIBS += -latomic
    endif
endif

6. 컴파일 명령

컴파일 명령은 다음과 같다.

 
# Define a recursive wildcard function
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
 
# Define all source files required
SRC_DIR = src
OBJ_DIR = obj
 
# Define all object files from source files
SRC = $(call rwildcard, *.cpp, *.h)
#OBJS = $(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
OBJS ?= main.cpp
 
 
 
# Default target entry
# NOTE: We call this Makefile target or Makefile.Android target
all:
	$(MAKE) $(MAKEFILE_PARAMS)
 
# Project target defined by PROJECT_NAME
$(PROJECT_NAME): $(OBJS)
	$(CC) -o $(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
 
# Compile source files
# NOTE: This pattern will compile every module defined on $(OBJS)
#%.o: %.c
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM)

7. 소결

Makefile을 만들었으니 이제 컴파일을 할 수 있다.

커맨드라인에서 'make'명령어를 치면 실행파일을 만들어 주는 것을 알 수 있다.

리눅스 환경에만 국한하여 만든 makefile을 첨부한다.

Raylib Linux Makefile

Visual Studio Code 환경 설정하기

1. Task.json 설정하기

Code Editor 내에서 알아서 빌드할 수 있게 위에서 만든 Makefile을 호출하게 해보자

가. 경로 변수

VS Code에서 현재 파일명을 받아오는 변수 ${fileBasenameNoExtension}이고

현재 워크스페이스의 폴더명을 받아오는 변수는 ${workspaceFolderBasename}이다.

우리가 컴파일해서 만들 설치파일은 워크스페이스 폴더의 이름으로 만드는 것이 좋을 것이다3).

따라서 ${workspaceFolderBasename}를 경로변수로 활용하자.

나. 공통 인자

Task.json에서 우리가 실행할 명령어는 “make”이고 PLATFORM = “PLATFORM_DESKTOP”이다. 그리고 디버그 모드인 경우에는 “BUILD_MODE=DEBUG”를 추가하면 될 것이다.

            "command": "make",
            "args": [
                "PLATFORM=PLATFORM_DESKTOP",
                "BUILD_MODE=DEBUG"
            ],

다. 리눅스에 적용되는 인자

리눅스 환경에서는 다음의 인자를 추가하면 된다.

            "linux": {
                "args": [
                    // "PROJECT_NAME=${fileBasenameNoExtension}",
                    "PROJECT_NAME=${workspaceFolderBasename}.run",
                    "DESTDIR=/usr/local",
                    "RAYLIB_LIBTYPE=STATIC",
                    "OBJS=*.cpp",
                    "BUILD_MODE=DEBUG"
                ]
            },

OBJS에 “*.cpp”라고 하여 Makefile에서 컴파일 대상으로 된 OBJS를 모든 cpp파일로 설정해 준 것을 알 수 있다.

2. 나머지

나머지는 지금까지 수정한 경로와 같은 방법으로 변경하면된다.

내가 사용한 “.vscode”폴더내의 파일들을 첨부한다.

VS CODE 환경 파일

결론

지금까지 만든 리눅스용 Raylib 템플릿 파일을 첨부한다.

Raylib Template - Linux, C++

1)
필자가 사용한 리눅스 배포판은 '하모니kr 8.0 백두'이다.
2)
example 폴더는 매우 예제가 좋으므로 꾸준히 보면 좋다
3)
만약 현재 파일명으로 설치파일을 만든다면 거대부분의 설치 파일의 이름은 “main”이 되어 버린다.
로그인하면 댓글을 남길 수 있습니다.

raylib/install/리눅스_환경에서_raylib_설치하기.1765726050.txt.gz · 마지막으로 수정됨: 저자 이거니맨