디시인사이드 갤러리

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

갤러리 본문 영역

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

흉황갤로그로 이동합니다. 2024.05.10 01:08:12
조회 263 추천 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
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2863 설문 시세차익 부러워 부동산 보는 눈 배우고 싶은 스타는? 운영자 24/05/27 - -
1 공지 고도엔진 마이너갤러리입니다 Monung갤로그로 이동합니다. 20.04.23 1821 15
116 공지 내가 본 것중 젤 도움된 튜토리얼 [11] ㅇㅇ(121.161) 20.09.15 7490 21
4283 질문 마우스 씬 도움이 필요합니다 [2] 바라랑-잡초미갤로그로 이동합니다. 09:47 30 0
4281 자료 에디터에서 GitHub Copilot을 써보자 [3] boost갤로그로 이동합니다. 00:08 73 7
4280 자료 해외 유저가 만든 고도 로고 [4] boost갤로그로 이동합니다. 05.26 91 0
4279 일반 대각선 이동 방지 대충 만들어옴 [2] ㅇㅇ(59.15) 05.26 69 0
4278 질문 2D 대각선 이동안하게 하는 명령어가 있을까요? [11] 고도5일차(116.37) 05.26 82 0
4277 창작, 오늘한것 - 테트리스인벤 도전 (#17) [1] ㅇㅇ갤로그로 이동합니다. 05.26 37 2
4276 일반 않이 스크립트로 스타일 박스 수정하는 작업이 생각보다 무겁네요 비베타갤로그로 이동합니다. 05.26 32 0
4275 일반 Navigation2D 랑 Astar2D 무슨 차이입니까? [3] ㅇㅇ(175.192) 05.26 55 0
4274 자료 godot4 github pages 빌드 & 배포하는 법 [1] boost갤로그로 이동합니다. 05.26 56 3
4273 일반 맨땅헤딩중인 게임개발 쌩뉴비인데 머리터진다 [3] ㅇㅇ(58.230) 05.26 88 0
4272 일반 고갤이 수면위로 올라온 이유.jpg [1] ㅇㅇ(59.17) 05.26 102 0
4271 일반 실베 보고 개발 하러 왔습니다 ㅇㅇ(59.17) 05.26 57 0
4270 질문 맥에서 cmd + backspace로 전체 안지워지는데 나만그럼? [1] boost갤로그로 이동합니다. 05.26 34 0
4269 일반 obsidian에서 gdscript highlight 하는법 [3] boost갤로그로 이동합니다. 05.26 57 0
4268 일반 알바에게 고도갤의 존재가 관측되어버린 것인가 [4] 김메가갤로그로 이동합니다. 05.26 145 1
4267 일반 인디게임 개발 생각보다 더 존나 대단한거였네 ㅇㅇ(61.80) 05.26 99 0
4265 일반 아니 실베 딱지 뭐야 [5] ㅇㅇ갤로그로 이동합니다. 05.26 188 1
4262 일반 고갤도 드디어 실베가... [2] 얍얍(175.192) 05.26 81 0
4261 일반 혹시 스크립트 에디터 왼쪽에 필요없는 스크립트나 문서 목록 없애는 방법 [4] ㅇㅇ(39.115) 05.26 43 0
4260 일반 실베간거 완장이?? [1] ㅇㅇ(118.46) 05.26 59 0
4259 일반 일랜시아 언제 나오냐고 ㅇㅇ(119.65) 05.26 38 0
4258 일반 많이 쓰이는 엔진중 오픈소스는 고도밖에 없는것같기도 [6] 정짜르갤로그로 이동합니다. 05.26 123 0
4257 일반 고도 에디터의 자유도 [8] ㅇㅇ갤로그로 이동합니다. 05.25 244 3
4256 질문 어거 어케 한거임?? [8] 바라랑-잡초미갤로그로 이동합니다. 05.25 142 2
4255 일반 4.3 6월에 나오겠지? [4] 정짜르갤로그로 이동합니다. 05.25 85 0
4254 일반 알아도 별로 쓸모없는정보 [5] ㅇㅇ(222.113) 05.25 156 2
4253 창작, 오늘한것 - 테트리스인벤 도전 (#16) (질문포함) [3] ㅇㅇ갤로그로 이동합니다. 05.24 101 3
4252 일반 아 엔진 아직 이해도가 없어서 잘안디ㅗ넹 [5] 고도초보자(222.236) 05.24 108 0
4251 일반 tr() 반대도 이썽? [4] ㅇㅇ(59.17) 05.24 87 0
4250 질문 공격 이미지와 이펙트 이미지 분리되어 있을때 동시에 나오게 할수는 없나? [2] 직캠러(121.144) 05.24 105 0
4249 창작, 겜 개발 근황 [17] ㅇㅇ갤로그로 이동합니다. 05.24 696 16
4248 일반 아 해결함!! [7] 고도초보자(222.236) 05.24 120 0
4247 질문 시그널(또는 함수 포인터 콜백)은 언제 쓰면 좋은가? [7] ㅇㅇ(39.7) 05.24 145 1
4246 일반 4.2.2버전으로 모바일 빌드해서 실행되는거 확인해보신분? [23] 고도초보자(222.236) 05.24 141 0
4245 일반 모바일은 고도3이 나음? [16] 고도초보자(222.236) 05.24 159 0
4244 일반 고도 로그캣 보는 법점. [6] 고도초보자(222.236) 05.23 85 0
4243 일반 firebelley 유데미 강의 진짜 짬이 보이넹 [5] ㅇㅇ(211.220) 05.23 134 1
4242 일반 아우 실행하니까 팅기네 바로 ㅋㅋ [1] 고도초보자(222.236) 05.23 75 0
4241 일반 도와주시오.!!! 모바일 빌드에러 [7] 고도초보자(222.236) 05.23 122 1
4240 창작, 뉴비의 텍겜 제작일지 5 [4] 비베타갤로그로 이동합니다. 05.23 109 0
4239 일반 유데미 고도 강의 추천 해주세용 [4] ㅇㅇ(118.35) 05.23 134 0
4238 일반 신박한 모니터 구입! [7] papyrus갤로그로 이동합니다. 05.23 208 2
4237 일반 코드 정리? 버그 수정? 미래의 내가 하겠지 [3] 마찌롱갤로그로 이동합니다. 05.23 115 0
4236 일반 c#에서 내가 시그널 다루는 법 [2] ㅇㅇ갤로그로 이동합니다. 05.22 146 2
4235 일반 시그널에 집착했는데 안그래도 되나보네 [6] ㅇㅇ (180.71) 05.22 131 0
4234 일반 이거는 체크하면 뭐 적용되는게 있어? [2] ㅇㅇ(59.17) 05.22 103 0
4232 일반 고도 다른 엔진이랑 스타일이 완전히 다르넹 [11] ㅇㅇ(211.220) 05.21 311 0
4231 일반 소리 소문 없이 그냥 출시된 고도엔진 게임이 좀 보이네 [4] 얍얍(175.192) 05.21 223 0
4230 일반 새벽에 심심해서 입문햇는데.. 너무재밌네 [2] ㅁㄴㅇㄹ(121.163) 05.21 161 1
4229 일반 짜릿하구나 나의 재능에 [4] 퀼트갤로그로 이동합니다. 05.21 187 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2