개발환경(C++): Linux + shell¶
이 챕터에서는 Linux 명령행에서 C++ 로 게임을 만드는 개발 환경에 대해 설명합니다.
새 프로젝트 만들기¶
터미널 상에서 다음 명령을 입력하면 my_project 라는 새로운 project 가 생성됩니다.
$ funapi_initiator my_project
새로 만들어진 프로젝트는 끝에 -source 가 붙은 디렉터리로 존재합니다. 예를 들어 위의 경우는 my_project-source 라는 이름이 됩니다. 게임 개발팀에서는 이 디렉터리를 SVN 저장소나 GIT 저장소에 넣고 공유할 수 있습니다.
Source 디렉터리 구조¶
funapi_initiator
명령으로 생성한 프로젝트의 -source 디렉터리는 다음에 설명하는 파일들을 포함합니다.
VERSION: 프로젝트의 버전 숫자를 기록합니다. 이 파일은 서버 관리 Part 3: 서버 패키징 에서 설명한 것처럼 게임 프로젝트의 패키지를 생성할 때, 식별 번호로 사용합니다.
README: 게임 프로젝트의 구조, 실행 방법, 소스코드 등의 설명을 자유로운 형식의 글로 남길 때 사용합니다.
LICENSE: 프로젝트에 적용할 라이선스 정보를 기재할 때 사용할 수 있습니다.
setup_build_environment: source 디렉터리를 이용해서 빌드 디렉터리를 생성하는 스크립트입니다. 옵션에 따라서 Linux command line 개발 환경 또는 Linux CLion 개발 환경 을 선택 할 수 있습니다.
CMakeLists.txt: 프로젝트를 빌드하는데에 사용하는 CMake 파일입니다. 프로젝트의 패키징 방식, Flavor 설정, 리소스 디렉터리 등을 이 곳에서 설정할 수 있습니다.
src/: 소스코드를 비롯한 프로젝트를 구성하는 파일들은 이 디렉터리에서 관리합니다.
CMakeLists.txt: 프로젝트를 구성하는 소스들을 정의하는 CMake 파일입니다. C++ 파일 및 헤더는
ADDITIONAL_CPP_SOURCES
에, protobuf 관련 파일들은ADDITIONAL_PROTO_SOURCES
에, 그리고 프로젝트가 의존하는 외부 라이브러리 경로를ADDITIONAL_LIBRARIES
에 지정할 수 있습니다. 외부 라이브러리 경로를 지정할 때는 find_library 명령어와 함께 사용하는 게 좋습니다.my_project_types.h: 기본적으로 생성되는 파일 중 하나로 프로젝트에서 사용할 타입들을 정의합니다.
my_project_loggers.json: 프로젝트의 activity logger 정의 파일입니다. Activity logger 에 대한 자세한 설명은 여기 를 참고하세요.
my_project_server.cc: 프로젝트의 시작과 끝을 구성하는 주요 함수들(Install, Start, Stop)을 정의한 파일입니다. 이 파일에서 프로젝트 인스턴스의 라이프사이클을 관리할 수 있습니다. Component model 에서 설명하는 것처럼 아이펀 엔진 프로젝트는 main 함수 대신 Install, Start, Stop 함수들과 콤포넌트들로 구성되어 있습니다.
event_handlers.h: my_project_server.cc 는 실행 중 처리할 Event 와 클라이언트로부터 수신한 메시지를 처리하기 위한 핸들러들을 등록합니다. message 들을 위한 핸들러들을 등록합니다. 이런 핸들러는 개발자가 임의의 위치에 정의해도 되지만, funapi_initiator 를 이용해서 게임을 만드는 경우는 핸들러들의 선언은 event_handlers.h 안에 기록됩니다. C++ 규약에 의해서 원하는대로 파일 이름을 바꾸거나 여러 파일로 나눌 수 있습니다.
event_handlers.cc: event_handelrs.h 에 정의한 핸들러들의 구현 내용을 포함합니다.
MANIFEST.json: my_project_server.cc 에 정의된 서버 콤포넌트를 포함해서 각 콤포넌트들의 의존성 및 설정을 정의합니다. 이 파일에 프로젝트 실행 시의 프로토콜, 서비스 포트, 스레드 개수 등과 같은 다양한 설정을 정의할 수 있습니다. MANIFEST.json 에 대한 자세한 설명은 여기 를 참고해주세요.
object_model/: 아이펀 ORM 오브젝트를 정의한 파일들을 담는 디렉터리입니다. 자세한 내용은 여기를 참고해 주세요.
example.json: 아이펀 ORM 오브젝트를 정의하는 파일입니다. 자세한 내용은 여기를 참고해 주세요.
mono/: 소스코드를 비롯한 프로젝트를 구성하는 파일들은 이 디렉터리에서 관리합니다.
my_project.csproj: 프로젝트를 구성하는 소스들을 정의하는 C# 프로젝트 파일입니다. Monodevelop 등의 IDE를 사용하여 프로젝트를 열 때 이 파일을 열면 됩니다. 파일을 추가 삭제하는 것은
<Compile Include="file_name.cs" />
, 그리고<Reference Include="..." />
변수를 추가하거나 수정하면 됩니다.server.cs: 프로젝트의 시작과 끝을 구성하는 주요 함수들(Install, Start, Stop)을 정의한 파일입니다. Component model 에서 설명하는 것처럼 아이펀 엔진 프로젝트는 main 함수 대신 Install, Start, Stop 함수들과 콤포넌트들로 구성되어 있습니다. 또한 실행 중 처리할 Event 와 클라이언트로부터 수신한 메시지를 처리하기 위한 핸들러들을 등록합니다. 이런 핸들러는 개발자가 임의의 위치에 정의해도 되지만, funapi_initiator 를 이용해서 게임을 만드는 경우에 핸들러들의 선언은 server.cs 안에 기록되게 됩니다. C++ 규약에 의해서 원하는대로 파일 이름을 바꾸거나 여러 파일로 나눌 수 있습니다.
ActivityLog/: Activity Logger 정의 및 자동 생성 클래스가 위치하는 디렉터리입니다. Activity logger 에 대한 자세한 설명은 여기 를 참고하세요.
my_project_loggers.json: 게임 프로젝트의 activity logger 정의 파일입니다.
my_project_logger.cs: logger 정의를 통해 자동 생성되는 activity logger 클래스입니다.
ObjectModel/: 아이펀 ORM 오브젝트를 정의한 파일들을 담는 디렉터리입니다. 자세한 내용은 여기를 참고해주세요.
my_project_object.cs: 아이펀 ORM 오브젝트 정의에 해당하는 클래스를 자동 생성합니다.
example.json: 아이펀 ORM 오브젝트를 정의하는 파일입니다.
Protobuf/: protobuf 메시지 정의 및 자동 생성 클래스를 담는 디렉터리입니다.
my_project_messages.proto: protobuf 메시지를 정의하는 파일입니다.
my_project_messages.cs: .proto 파일을 통해 자동 생성되는 클래스 파일입니다.
my_project_protobuf_helper.cs: protobuf 클래스의 헬퍼 클래스로 자동 생성됩니다.
Manifest/:
MANIFEST.json: my_project_server.cs 에 정의된 서버 콤포넌트를 포함해서 각 콤포넌트들의 의존성 및 설정을 정의합니다. 이 파일에 서버 실행시의 프로토콜, 서비스 포트, 스레드 개수 등과 같은 다양한 설정을 정의할 수 있습니다. MANIFEST.json 에 대한 자세한 설명은 여기 를 참고해주세요.
Attention
앞서 설명한 Activity Logger , Object Model , Protobuf 의 정의 파일(.json
, .proto
)과 MANIFEST.json 파일은 실제로는 my_project-source/src/ 하위에 존재합니다.
Monodevelop IDE 가 아닌 다른 환경에서 개발 하실 때에는 해당 폴더를 열어 정의 파일을 수정해야합니다.
빌드하기¶
위 명령을 실행하면 my_project-build 라는 directory 를 생성하게 됩니다. 이 directory 에는 debug 빌드와 release 빌드를 위한 하위 디렉토리가 있습니다. 원하는 directory 안에 들어가서 make 를 입력하시면 됩니다. debug 빌드를 하시려면 다음과 같이 입력합니다.
$ cd my_project-build/debug
$ make