디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[일반] [팁] 5분만에 CMake GDExtension 빌드 환경 만들기

흉황갤로그로 이동합니다. 2024.05.10 01:08:12
조회 253 추천 6 댓글 4
														

일반적으로 GDExtension는 Scons를 이용하여 빌드합니다.

공식문서에서도 Scons를 사용하는 방법을 가이드하고있구요.


하지만 이번 글에서는 CMake로 빌드하는 방법을 알려드리겠습니다.

CMake 사용 방법을 모르더라도 복붙 2~3번과 약간의 수정만 거치면 빌드가 가능하니,

Scons의 장벽에 가로막혀서 GDExtension 사용을 포기하신 분들도 한번 따라해 보시와요.


우선 시작에 앞서, CMake를 설치하거나 CMake가 내장된 IDE (Clion 강추)를 설치해주세요.

※ 모듈 이름은 example이라 가정하고 작성했습니다. "example" 이라고 적혀있는 부분은 자유롭게 바꿔서 쓰세요



1. GDExtension을 빌드할 폴더를 하나 만들고 CMakeLists.txt파일을 만들어서 넣어주세요.

폴더 이름은 상관없지만 저는 직관적으로 GDExtension으로 지었어요.


GDExtension

    | - CMakeLists.txt


CMakeLists.txt는 다음과 같이 작성해주세요

cmake_minimum_required(VERSION 3.19)
project(gdextension)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

include(FetchContent)

FetchContent_Declare(
GDExtension
GIT_REPOSITORY https://github.com/godotengine/godot-cpp.git
GIT_TAG godot-4.2.2-stable
)

FetchContent_MakeAvailable(GDExtension)

# modify here
add_subdirectory(example)


2. GDExtension 파일 내부에 빌드할 모듈에 대한 폴더를 만들고 CMakeLists.txt와, 소스코드를 담을 src 폴더를 만들어 주세요.


GDExtension

    | - CMakeLists.txt

    | - example

            | - CMakeLists.txt

            | - src


example\CMakeLists.txt는 다음과 같이 작성해주세요

#modify here
project(example)


file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")


add_library(${PROJECT_NAME} SHARED ${SOURCES})


target_include_directories(${PROJECT_NAME} PRIVATE "src")


target_link_libraries(${PROJECT_NAME} PUBLIC godot::cpp
-static-libgcc -static-libstdc++ -static -pthread)

source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/src" PREFIX src FILES ${SOURCES})



3. src 폴더에 reg1ister_types.cpp 파일을 만들고 아래 내용을 작성해주세요.(reg1ister 금지어라 대충 알잘딱하게 바꿔서 써주세요)

#include <godot_cpp/godot.hpp>

#include <godot_cpp/core/class_db.hpp>

void reg1ister_example_types(godot::ModuleInitializationLevel p_level)
{
    if (p_level != godot::ModuleInitializationLevel::MODULE_INITIALIZATION_LEVEL_SCENE)
    {
        return;
    }
}

void unreg1ister_example_types(godot::ModuleInitializationLevel p_level)
{
}

extern "C"
{
    GDExtensionBool GDE_EXPORT example_library_init(const GDExtensionInterfaceGetProcAddress address,

GDExtensionClassLibraryPtr p_library,

GDExtensionInitialization* r_initialization)

    {
        godot::GDExtensionBinding::InitObject init_object(address, p_library, r_initialization);

        init_object.reg1ister_initializer(reg1ister_example_types);
        init_object.reg1ister_terminator(unreg1ister_example_types);
        init_object.set_minimum_library_initialization_level(godot::ModuleInitializationLevel::MODULE_INITIALIZATION_LEVEL_SCENE);

        return init_object.init();
    }

}


소스코드 작성하는 방법은 공식문서에 참고하셔서 작성하시면 됩니다.

https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/gdextension_cpp_example.html

 



이제 빌드를 해봅시다.

clion을 사용하시면 우상단 망치모양 버튼 누르시면 자동으로 빌드되지만,

만약 수동으로 빌드해야하는 상황이라면 아래 명령어를 사용하시면 됩니다.


cmake -S . -B ./build

cmake --build ./build


.... 놀랍게도 이게 끝입니다.

이후에 모듈을 사용할 고도 프로젝트 내부에 bin폴더 생성해서 빌드한 dll파일 복붙해주시고,

example.gdextension 파일 만드셔서

[configuration]
entry_symbol = "example_library_init"
compatibility_minimum = "4.2.2"

[libraries]
windows.debug.x86_64 = "res://bin/libexample.dll"

이렇게 작성해주시면 이제 C++로 작성한 모듈을 프로젝트에 사용할 수 있습니다.



혹시나 헷갈리시는 부분 있으시면 자유롭게 질문주세용가리치킨

고도각


추천 비추천

6

고정닉 2

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2861 설문 어떤 상황이 닥쳐도 지갑 절대 안 열 것 같은 스타는? 운영자 24/05/20 - -
1 공지 고도엔진 마이너갤러리입니다 Monung갤로그로 이동합니다. 20.04.23 1808 15
116 공지 내가 본 것중 젤 도움된 튜토리얼 [11] ㅇㅇ(121.161) 20.09.15 7418 21
4253 창작, 오늘한것 - 테트리스인벤 도전 (#16) (질문포함) ㅇㅇ갤로그로 이동합니다. 23:27 19 1
4252 일반 아 엔진 아직 이해도가 없어서 잘안디ㅗ넹 [2] 고도초보자(222.236) 21:33 34 0
4251 일반 tr() 반대도 이썽? [4] ㅇㅇ(59.17) 18:06 51 0
4250 질문 공격 이미지와 이펙트 이미지 분리되어 있을때 동시에 나오게 할수는 없나? [2] 직캠러(121.144) 16:10 68 0
4249 창작, 겜 개발 근황 [14] ㅇㅇ갤로그로 이동합니다. 15:54 226 13
4248 일반 아 해결함!! [6] 고도초보자(222.236) 12:40 77 0
4247 질문 시그널(또는 함수 포인터 콜백)은 언제 쓰면 좋은가? [7] ㅇㅇ(39.7) 09:18 109 1
4246 일반 4.2.2버전으로 모바일 빌드해서 실행되는거 확인해보신분? [23] 고도초보자(222.236) 09:12 113 0
4245 일반 모바일은 고도3이 나음? [16] 고도초보자(222.236) 08:07 114 0
4244 일반 고도 로그캣 보는 법점. [6] 고도초보자(222.236) 05.23 71 0
4243 일반 firebelley 유데미 강의 진짜 짬이 보이넹 [5] ㅇㅇ(211.220) 05.23 103 1
4242 일반 아우 실행하니까 팅기네 바로 ㅋㅋ [1] 고도초보자(222.236) 05.23 61 0
4241 일반 도와주시오.!!! 모바일 빌드에러 [7] 고도초보자(222.236) 05.23 97 1
4240 창작, 뉴비의 텍겜 제작일지 5 [4] 비베타갤로그로 이동합니다. 05.23 86 0
4239 일반 유데미 고도 강의 추천 해주세용 [4] ㅇㅇ(118.35) 05.23 97 0
4238 일반 신박한 모니터 구입! [7] papyrus갤로그로 이동합니다. 05.23 165 2
4237 일반 코드 정리? 버그 수정? 미래의 내가 하겠지 [3] 마찌롱갤로그로 이동합니다. 05.23 100 0
4236 일반 c#에서 내가 시그널 다루는 법 [2] ㅇㅇ갤로그로 이동합니다. 05.22 129 2
4235 일반 시그널에 집착했는데 안그래도 되나보네 [6] ㅇㅇ (180.71) 05.22 116 0
4234 일반 이거는 체크하면 뭐 적용되는게 있어? [2] ㅇㅇ(59.17) 05.22 89 0
4232 일반 고도 다른 엔진이랑 스타일이 완전히 다르넹 [11] ㅇㅇ(211.220) 05.21 281 0
4231 일반 소리 소문 없이 그냥 출시된 고도엔진 게임이 좀 보이네 [4] 얍얍(175.192) 05.21 205 0
4230 일반 새벽에 심심해서 입문햇는데.. 너무재밌네 [2] ㅁㄴㅇㄹ(121.163) 05.21 146 1
4229 일반 짜릿하구나 나의 재능에 [4] 퀼트갤로그로 이동합니다. 05.21 167 1
4228 일반 세상에서 가장 최적화된 황금 코드를 찾고 싶다. [3] ㅇㅇ갤로그로 이동합니다. 05.21 101 0
4227 일반 오늘한것-병신짓 [7] ㅇㅇ갤로그로 이동합니다. 05.20 141 0
4224 일반 패치 시스템은 어떻게 제작해야 하나요? [10] ㅇㅅㅇ(211.192) 05.20 133 0
4223 엔진 2024년 고도콘이 가을 베를린에서 주최됩니다 [2] ㅇㅇ(222.113) 05.20 107 1
4222 일반 카메라에서 매 프레임마다 마우스 위치로 레이 쏴도 ㄱㅊ? [5] ㅇㅇ(118.235) 05.20 83 1
4220 일반 웹내보내기 공지에 퍼리걸려있으니까 꼴받네 [8] ㅇㅇ갤로그로 이동합니다. 05.20 110 1
4219 일반 3.6버전이 3의 마지막 지원 버전이 아니었네? [3] ㅇㅇ(210.101) 05.20 101 1
4218 일반 child_entered_tree 시그널 정말 좋네요 ㅇㅇ(118.235) 05.20 64 0
4217 일반 게임엔진은 이벤트 발생 순서나 중단같은거 다 관리해주죠?? [2] ㅇㅇ(118.235) 05.20 95 0
4216 창작, Circular menu 만들기 [3] octalog갤로그로 이동합니다. 05.20 125 4
4215 일반 고도로 3d는 무리인가? [6] ㅇㅇ(222.104) 05.19 220 0
4214 일반 뉴비 add_child() 질문 [2] 야스24갤로그로 이동합니다. 05.19 98 0
4213 일반 오늘한것 - 테트리스인벤 도전 (#15) [1] ㅇㅇ갤로그로 이동합니다. 05.19 110 5
4211 일반 마우스휠 막는 법 있음? ㅇㅇ(180.182) 05.19 70 0
4210 일반 매번 당하는 벡터 함정 ㅋㅋ [6] ㅇㅇ(211.199) 05.19 156 0
4209 일반 패널컨테이너 사이즈 왜 자꾸 지랄남?? [6] ㅇㅇ갤로그로 이동합니다. 05.19 89 0
4208 일반 다이얼로그(대사) 관련 툴 추천해주세 ㅇㅇ(211.192) 05.19 54 0
4207 일반 와 고도 엄청 가볍네 [5] ㅇㅇ(211.220) 05.19 168 1
4205 일반 고도 사토루 활! 부! [2] ㅇㅇ(118.235) 05.18 124 0
4204 일반 오늘한것 - 테트리스인벤 도전 (#14) [1] ㅇㅇ갤로그로 이동합니다. 05.18 71 3
4203 일반 고도엔진4 책 탐독 ㅇㅇ(222.106) 05.18 115 0
4202 일반 방황끝 결정했다! [3] papyrus갤로그로 이동합니다. 05.17 193 0
4201 일반 기즈모 플러그인 이야기인데 [5] 얍얍(175.192) 05.17 115 0
4200 일반 코루틴 라이브러리 만들어 봤음 [2] 인디게임지망생갤로그로 이동합니다. 05.16 133 1
4199 일반 자스에서 파이어베이스쓰는 법 이해했다. ㅇㅇ갤로그로 이동합니다. 05.16 62 0
4198 일반 (꿀팁) 씬 새로고침 하려고 닫았다 끌필요 업읍니다 [3] ㅇㅇ(222.113) 05.16 247 16
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2