コマンドラインでcocos2d-xを簡単にビルドするためのMakefile


はじめに

cocos2d-xをビルドする時、iOSならxCode、AndroidならEclipseでしょうか。
開発中ならコマンドでさくっとビルドして確認するといった方が効率がいいこともあると思います。

cocosコマンド(cocos2d-consoleというらしい)でビルドできたりするのですが、自分の場合オプションを覚えるのが面倒だったのでMakefileを介してビルドとかしています。

Makefileコード

cocos2d-xプロジェクトのルートディレクトリに以下のコードをコピーしてMakefileとして作るだけです。

REPO_ROOT      := $(shell pwd)
USERPLATFORM    = $(shell uname)
DEPLOY_DIR      = $(REPO_ROOT)/deploy

#
# set platforms
#
PLATFORMS = android
ifeq ($(USERPLATFORM), Linux)
PLATFORMS += linux
endif
ifeq ($(USERPLATFORM), Darwin)
PLATFORMS += ios
endif

# common
REMOVE=rm -fr
JOB=-j 8
MAKE=cocos

default: all
all: $(PLATFORMS)

define PLATFORM_RULES
.PHONY: $(1)
$(1):
    @$(MAKE) run -p $(1) $(JOB)
deploy_$(1): FORCE
    @$(MAKE) deploy -p $(1) $(JOB)
build_$(1): FORCE
    @$(MAKE) compile -p $(1) $(JOB)
endef
$(foreach a,$(PLATFORMS),$(eval $(call PLATFORM_RULES,$(a))))


distclean:
    @echo "##### clean cocos ####"
    $(REMOVE) bin
    $(REMOVE) cocos2d/build/build
    $(REMOVE) cocos2d/cocos/platform/android/java/bin
    $(REMOVE) cocos2d/cocos/platform/android/java/gen
    $(REMOVE) cocos2d/cocos/platform/android/java/local.properties

clean_android:
    @echo "##### clean android ####"
    $(REMOVE) proj.android/assets
    $(REMOVE) proj.android/bin
    $(REMOVE) proj.android/gen
    $(REMOVE) proj.android/libs/armeabi
    $(REMOVE) proj.android/libs/x86
    $(REMOVE) proj.android/local.properties
    $(REMOVE) proj.android/obj

clean_ios:
    @echo "##### clean ios ####"
    $(REMOVE) proj.ios_mac/build

clean_linux:
    @echo "##### clean linux ####"
    $(REMOVE) linux-build

.PHONY: all android clean clean_android clean_ios clean_linux distclean
FORCE:

by gist

Makeコマンド

簡単にコマンドの解説します。

Android

  • エミュレータの場合、CPU設定をADMにすること
  • エミュレータの場合、Use Host GPUにチェックしておくこと
  • アプリをインストールする場合、デバイスに接続しておく必要がある
$ make android          # buildして接続しているデバイスにインストールする
$ make build_android    # buildのみ
$ make clean_android    # android関連をクリーン

iOS

  • エミュレータの場合、自動で立ち上がる
$ make ios          # buildしてアプリケーションが実行される
$ make build_ios    # buildのみ
$ make clean_ios    # ios関連をクリーン

linux

$ make linux
$ make build_linux
$ make clean_linux

distclean

  • cocos2d-xのライブラリを含むすべてが削除される
  • 再度ビルドする場合は時間がかかる
$ make distclean

おしまい

デバイス指定できないしcleanのところなんか雑でして、そんなにフレキシブルではないですが、makeコマンドなので補完とかしてくれるし便利だと思います。

実際、自分はiOSとAndroidのマルチプラットフォーム開発なのですが、IDEはxcode、androidはコマンドでそれぞれ開発しています。IDEを切り替える必要がないので楽です。

それにしてもcocos2d-console、helpを見る限り色々できそうです。パッケージ管理とかもできるそうな。(http://www.slideshare.net/giginet/cocos2dconsole)

cocos2d-consoleでできることを調べてまとめたいですね^^;

おまけ

cocos2d-xを最初から設定してみる

初めて使う人のために一応手順を書いておきます。ほとんど公式のREADME.mdの手順と同じです。

下準備

ant install

  • Androidビルドのためにantをインストールしておきます。(ついでにwgetも)
$ brew install ant wget

downloads NDK

  • ndkが必要なのでダウンロードして展開、任意のディレクトリに置きます
# 権限変更
$ chmod 755 ./android-ndk-r10e-darwin-x86_64.bin
# 展開 (数分かかる場合あり)
$ ./android-ndk-r10e-darwin-x86_64.bin

※ android studioを使っている場合、~/Library/Android/sdk/ndk-bundleにあるはず

cocos2d-xの設定

git cloneしてバージョンはv3.10(2016/01現在の最新)にします。

$ git clone https://github.com/cocos2d/cocos2d-x.git
$ cd ./cocos2d-x
$ git checkout v3.10
$ git submodule update --init

download-deps.pyで依存を解決して、setup.pyで環境変数を設定します。NDKの場所を尋ねられた場合は、前述で展開したディレクトリを入力してEnterします。

$ python download-deps.py
$ ./setup.py

環境設定ファイルを読み直します。(自分はbashなので.bash_profile)

$ source .bash_profile

環境設定ファイルを見てみると、以下のように環境変数が設定されているはずです。(ホームディレクトリは~/に置き換えてあります)

$ cat .bash_profile
    : # 略
# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=~/cocos2d-x/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH

# Add environment variable COCOS_X_ROOT for cocos2d-x
export COCOS_X_ROOT=~/
export PATH=$COCOS_X_ROOT:$PATH

# Add environment variable COCOS_TEMPLATES_ROOT for cocos2d-x
export COCOS_TEMPLATES_ROOT=~/cocos2d-x/templates
export PATH=$COCOS_TEMPLATES_ROOT:$PATH

# Add environment variable ANDROID_SDK_ROOT for cocos2d-x
export ANDROID_SDK_ROOT=~/Library/Android/sdk
export PATH=$ANDROID_SDK_ROOT:$PATH
export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH

# Add environment variable NDK_ROOT for cocos2d-x
export NDK_ROOT=~/Library/Android/sdk/ndk-bundle
export PATH=$NDK_ROOT:$PATH

# Add environment variable ANT_ROOT for cocos2d-x
export ANT_ROOT=/usr/local/Cellar/ant/1.9.6/bin
export PATH=$ANT_ROOT:$PATH

Project作成して実行

プロジェクト作成します

$ cocos new MyGame -p com.example.mygame -l cpp

上記のMakefileをダウンロードします。(自分でコピペしてもいいです)

$ cd ./MyGame
$ https://gist.githubusercontent.com/caad1229/8b501cf214b62dd415fa/raw/3dc5b8136fe2d8de5446dded8394142805b9e60a/Makefile

ビルドしてインストールしてみます。
(Androidのエミュレータか、実機を接続しておいてください)

$ make android

ココスくん(勝手に命名)出ましたか?

実際、c++の部分だけ確認したかったらbuild_native.py叩いてもビルドだけならできます。色々試してみてください!

$ cd ./proj.android
$ ./build_native.py