게임 개발/Cocos2d-x

cocos2d-x 3.17 이상에서 빌드 목록 작성 android.mk 대신 CMakeLists.txt 사용

날개 2019. 1. 29. 12:41

얼마전 안드로이드 스튜디오가 3.3 으로 정식 업데이트 되었지요.


6개월정도 방치해 두었다가 다시 꺼내든 두개의 cocos2d-x 프로젝트 두개... 빌드하려고 하니 에러가 나면서 빌드가 되지 않습니다.


기존 프로젝트 하나는 cocos2d-x 3.16 버전, 또 하나는 더 오래된 버전으로 개발했었죠.


이유는... NDK 가 업데이트 되면서 더이상 gcc 를 지원하지 않습니다. 그래서 gradle.build 를 수정했더니... 안드로이드 스튜디오가 무한 인덱싱 빠집니다. ㅡ,.ㅡ


그냥 cocos2d-x 최신 버전으로 업데이트 하기로 합니다. 이번에도... 역시나 여기저기 바뀐 것들이 많아서 새로 프로젝트 생성하는게 빠르다고 결론이 났습니다.


현재 cocos2d-x 최신 버전은 3.17.1 이며, 일부 경고가 뜨긴 하지만 안드로이드 스튜디오 3.3 + 최신 ndk (현재 버전 19) 에서의 빌드도 잘 됩니다. 


그런데, 신규 프로젝트를 생성하고 기존 프로젝트 소스코드와 리소스를 씌우니 빌드가 안됩니다.


게다가 오류 내용을 보니, 필요 없어 삭제한 HelloWorld.cpp 가 없다고 합니다. 물론 Android.mk 는 정상적으로 예전에 쓰던 파일 목록을 그대로 가져 왔으며, HelloWorld.cpp 는 제거 하였습니다. 


cocos2d-x 공식 사이트에 들어가서 업데이트 상황을 보니, cmake를 지원한다고 나옵니다. 무슨 뜻일까 고민도 해보고 그래들 파일도 비교해 보니... cocos2d-x 3.17부터는 Android.mk 를 기본적으로 지원하지 않습니다. ㅡㅡ


대신 프로젝트 루트 디렉터리에 있는 CMakeLists.txt 파일을 수정해야 합니다. 이제 CMakeLists.txt 에 빌드할 파일들을 나열해야 합니다. (이런것좀 도큐먼트에 잘 설명좀 해놓으면 좋으련만... 아니면 제가 도큐먼트를 잘 못찾는 것일까요?)


(물론 설정들을 바꾼다면 Android.mk 파일을 사용할 수도 있겠지만, 이것 저것 건드리는 것을 별로 좋아하지 않으므로... 순정을 좋아합니다.)


그래서 CMakeList.txt 파일을 수정하는 방법을 기록해 둡니다.



게임 프로젝트 루트에 보면, CMakeList.txt 파일이 있습니다. 해당 파일을 엽니다.





파일을 열어보면,


'list(APPEND GAME_SOURCE' 로 시작하는 부분과, 'list(APPEND GAME_HEADER'로 시작하는 부분을 찾을 수 있습니다.


'list(APPEND GAME_SOURCE' 로 시작하는 부분에 게임 소스코드 파일들 (C 또는 CPP 파일들)을 나열합니다.


'list(APPEND GAME_HEADER' 로 시작하는 부분에는 헤더 파일들을 나열합니다.




이게 끝입니다.


그런데, 게임 소스코드나 헤더 파일들이 한두개도 아니고 어떻게 일일이 입력을 할까요...


인터넷을 찾아보니 와일드 카드를 사용하는 방법이 있기는 한가 봅니다. 그런데 별로 추천을 하지 않네요. 시간은 없고 CMake 에 저는 익숙하지 않습니다.


그래서 꼼수를 사용해 파일 리스트를 뽑아 냅니다. 여기서 부터는 맥 사용자에게 해당 됩니다. 윈도우 사용자 분들은 비슷한 방법을 찾아 보시기 바랍니다.


터미널을 열고, 프로젝트의 루트 디렉터리로 이동 후 아래의 명령어로 우선 c 파일과 cpp 파일의 리스트를 cpp.txt 란 파일로 뽑아 냅니다.


프로젝트 루트 디렉터리> find Classes -type f -name *.c -o -name *.cpp > cpp.txt


이제, 아래의 명령어로 h 파일과 hpp 파일의 리스트를 h.txt 란 파일로 뽑아 냅니다.


프로젝트 루트 디렉터리> find Classes -type f -name *.h -o -name *.hpp > h.txt


이제 만들어진 cpp.txt 파일과 h.txt 파일을 열어서 CMakeLists.txt 의 해당 부분에 복사해서 붙여 넣기를 하면 끝입니다.



cocos2d-x... 플랫폼이 되었던 엔진이 되었던 업데이트 할때마다 힘들게 하네요.


두 프로젝트는 이미 cocos2d-x 로 만들어 놓았으니 어쩔 수 없지만... 새로운 프로젝트는 저는 유니티로 할 것 같습니다.




(C) 2019 WingsNote.com (무단 복제 및 게시 금지, 링크 허용)