cocos2d-x Win32 Template을 입맛에 맞게 Customizing 해보자

 본격적으로 정리에 앞서 이번 포스팅부터는 cocos2d-x 버전을 cocos2d-2.0-x-2.0.4 로 진행합니다. 물론 아직 회사는 2.0.1이긴 하지만 조만간 2.0.4로 적용할 예정입니다. cocos2d-x가 2.1.0으로 업데이트를 했네요. 2.0.1 에서 마이그레이션 하면서 나오는 이슈는 추후 따로 정리를 해보도록 하겠습니다.
  • cocos2d-x 2.0.4
  • cocos2d-x 2.1.0
  • Windows 7 64bit
  • Visual Studio 2012
 일단 이번 포스팅 개발 환경은 위와 같습니다. 그리고 각자의 개발 환경에 따라 디렉토리는 다를 수 있습니다. 자, 다음은 제가 왜 cocos2d-x win32 template를 수정하게 되었는지에 대한 것을 설명해보겠습니다.

 기본적으로 cocos2d-x을 압축 해제후 install-templates-msvc.bat를 실행해서 Visual Studio용 template를 설치하죠.

 다음으로 cocos2d-win32.vc2012.sln 솔루션을 열게되면 이렇게 생겼습니다. 여기다가 cocos2d-x 기반 프로젝트를 만들어서 진행 하실겁니다. 제가 테스트로 mytest라는 프로젝트를 기존 솔루션에 추가해서 만들었습니다. 추가포함 디렉토리를 잘 보시면 SolutionDir을 기반으로 설정됩니다. 즉, cocos2d-win32.vc2012.sln 파일이 있는 위치를 기반으로 한다는 것이죠.

 실제로도 cocos2d-x root 디렉토리에 제가 만든 mytest 프로젝트가 생성된 것을 확인할 수 있습니다. 자, 여기까지는 아무런 문제가 없습니다. 그냥 일반적으로 cocos2d-x로 게임을 개발한다면 진행하게 되는 과정이죠.

 이제 제가 개인적으로 진행중인 것의 디렉토리 구조를 보겠습니다. 위에 나왔던 cocos2d-x는 Code라는 디렉토리 하위에 존재한 녀석입니다. 각 디렉토리마다 존재 의미가 있는데 일단 Project 디렉토리에 개발할 Game이나, Tool, App 프로젝트들을 넣을 생각입니다. Lib에는 빌드한 lib들이 들어갑니다.

 Project 디렉토리에 Games 솔루션과 간단한 test1 프로젝트를 하나 만들어보겠습니다.

 test1이라고 만들어진 디렉토리 구조입니다. 문제는 여기서 발생하게 됩니다. 아까랑 같겠지만 프로젝트 설정을 보겠습니다.

 추가 포함 디렉토리를 보면 딱 봐도 문제가 있어보입니다. 디렉토리 참고가 다 $(SolutionDir)이죠. 즉, Project\Games\ 가 되는 것입니다. 맨 위에 있던 cocos2d-x 의 솔루션에서 했다면 별 문제 없겠지만, 지금은 제가 임의의 위치에 솔루션과 프로젝트를 만들었기 때문에 문제가 됩니다. 물론 프로젝트를 만들고 나서 직접 수정해도 됩니다. 다만 프로젝트를 만들때마다 일일이 수정을 해줘야 한다는게 함정이죠.


추가 포함 디렉토리(Additional Inlcude Directories) 수정

 이제부터는 cocos2d-x Win32 template을 수정해서 임의의 디렉토리에 생성한 프로젝트도 문제없도록 해보겠습니다. 제 환경에서는 $(SolutionDir)..\..\Code\cocos2d-2.1beta3-x-2.1.0\cocos2dx\ 가 되겠지요.

 먼저 cocos2d-x 설치 디렉토리\template\msvc\CCAppWiz.win32\Scripts\1033\default.js 파일을 편집합니다. 스샷과 같이 226라인부터가 추가 포함 디렉토리 관련 부분입니다. 이것을 수정합니다.


// Additional Inlcude Directories
            var strAddIncludeDir = '.;..\\Classes';
            strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\cocos2dx';
            strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\cocos2dx\\include';
            strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\cocos2dx\\kazmath\\include';
            strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\cocos2dx\\platform\\win32';
            strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\cocos2dx\\platform\\third_party\\win32';
            strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\cocos2dx\\platform\\third_party\\win32\\OGLES';
       
            if (wizard.FindSymbol('CC_USE_BOX2D')) {
                strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\external';
            }
            if (wizard.FindSymbol('CC_USE_CHIPMUNK')) {
                strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\external\\chipmunk\\include\\chipmunk';
            }
            if (wizard.FindSymbol('CC_USE_COCOS_DENSHION_SIMPLE_AUDIO_ENGINE')) {
                strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\CocosDenshion\\include';
            }
            if (wizard.FindSymbol('CC_USE_LUA')) {
                strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\scripting\\lua\\cocos2dx_support';
                strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\scripting\\lua\\tolua';
                strAddIncludeDir += ';$(SolutionDir)..\\..\\Code\\cocos2d-2.1beta3-x-2.1.0\\scripting\\lua\\lua';
            }

 전 이와같이 수정했습니다. 이제 저장하고 install-templates-msvc.bat를 다시 실행해서 적용을 시켜줍니다.

 Visual Studio를 실행 후 새로운 프로젝트를 만들어봤습니다. js파일을 수정한 그대로 추가 포함 디렉토리가 설정되어 있습니다.


출력, 중간 디렉토리 수정

            if(WizardVersion >= 10.0) {
                config.OutputDirectory = '$(SolutionDir)..\\..\\Bin\\$(SolutionName)\\$(ProjectName)\\'
                config.IntermediateDirectory = '$(SolutionDir)..\\..\\Build\\$(SolutionName)\\$(ProjectName)\\$(Configuration).win32\\';
            } else {
                config.OutputDirectory = '$(SolutionDir)$(ConfigurationName).win32'
                config.IntermediateDirectory = '$(ConfigurationName).win32';
            }

 215라인 WizardVersion >= 10.0 인 부분을 수정하면 됩니다.


추가 라이브러리 디렉터리

LinkTool.AdditionalLibraryDirectories = ';$(SolutionDir)..\\..\\Lib\\cocos2d-x\\$(Configuration).win32';

 303라인을 수정합니다.

 자 이제 저장 후 install-templates-msvc.bat 실행한 후 새로운 프로젝트를 만들어보면 수정한데로 프로젝트 속성이 만들어져 있는 것을 확인 할 수 있습니다. 하지만 이상태에서 빌드하면 링크에러가 나죠.

1>LINK : fatal error LNK1104: 'libcocos2d.lib' 파일을 열 수 없습니다.

 위와 같이 말이죠.


libcocos2d, libCocosDenshion 프로젝트 속성 수정

 이제 위 링크에러를 수정하기 위해 cocos2d-x 관련 프로젝트를 수정해서 libcocos2d.lib와 libCocosDenshion.lib을 원하는 위치에 생성하겠습니다. 수정하지 않는다면 이 역시 cocos2d-win32.vc2012.sln 파일과 같은 위치의 Debug.win32 폴더에 생성이 되는데 제가 원하는 디렉터리가 아닙니다.

 진행중인 솔루션에 Libs라는 새 솔루션 폴더를 만들어 \cocos2dx\proj.win32 에 있는 cocos2d와 CocosDenshion\proj.win32 에 있는 CocosDenshion 프로젝트를 추가합니다.

출력 디렉터리
$(SolutionDir)..\..\Lib\cocos2d-x\$(Configuration).win32\
중간 디렉터리
$(SolutionDir)..\..\Build\$(SolutionName)\$(ProjectName)\$(Configuration).win32\

 이제 libcocos2d와 libCocosDenshion 프로젝트의 Debug, Release 빌드 구성 모두 위와 같이 수정합니다. 나머지 설정하지 않은 libchipmunk, libExtensions, liblua 등도 위와같이 처리하면 되겠습니다.

 이제 개발중인 프로젝트에 마우스 우클릭 -> 프로젝트 종속성 창에서 libcocos2d, libCocosDenshion을 체크하고 빌드하면 이상없이 빌드가 됩니다.

 근데 디버그 실행하면 위와같이 dll이 없다고 하죠. exe가 만들어진 디렉터리에 cocos2d-x관련 dll을 복사해줘야 합니다.


            // Post-build settings
//            var PostBuildTool = config.Tools("VCPostBuildEventTool");
//            PostBuildTool.Description = "Performing copy resource from Resource to OutDir...";
//            PostBuildTool.CommandLine = "xcopy /E /Q /Y \"$(ProjectDir)Resource\\*.*\" \"$(OutDir)\"";


 331라인에 보면 위와같이 주석으로 막혀있는 부분이 있습니다. 이 부분에 추가 및 수정을 아래와 같이 합니다.


// Pre-build settings
var PreBuildTool = config.Tools("VCPreBuildEventTool");
PreBuildTool.Description = "Performing copy dll from Lib to OutDir...";
PreBuildTool.CommandLine = "xcopy /Y /Q \"$(SolutionDir)..\\..\\Lib\\cocos2d-x\\$(Configuration).win32\\*.dll\" \"$(OutDir)\"";
// Post-build settings
var PostBuildTool = config.Tools("VCPostBuildEventTool");
PostBuildTool.Description = "Performing copy resource from Resource to OutDir...";
PostBuildTool.CommandLine = "xcopy /E /Q /Y \"$(ProjectDir)..\\Resources\\*.*\" \"$(OutDir)\"";

 빌드 이벤트로 exe가 생기는 OutDir에 실행에 필요한 dll과 Resources 폴더의 리소스를 복사하게 합니다. 빌드 후 이벤트에 다 추가해볼려고 했는데 잘 안되서 빌드 전 이벤트와 나눠서 추가해봤습니다.


 이제 default.js를 저장하고 install-templates-msvc.bat를 실행 후 새로 프로젝트를 만들어 빌드 후 실행하면 한번에 잘 되실 겁니다.

 지금까지 제 환경에 특화된 설명을 했습니다. 각각 개인의 프로젝트의 환경에 맞춰 변경해야할 부분들이 있겠습니다.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.