読者です 読者をやめる 読者になる 読者になる
「 s e a r c h 」 ら へ ん へ い く ボ タ ン

Macアプリ開発のためのcocos2d-xの静的ライブラリ作成

あらかじめcocos2d-xの静的ライブラリを作成しておくことでMacアプリのビルドを素早く行う.

cocos2d-xのビルドの時,cocos2dは変更してないのにクリーンビルドしていそうな時がよくある.大変遅い.cocos2dのビルドを省略してビルドを高速化したい.そこで静的ライブラリを作成する.作成した静的ライブラリは新しいプロジェクトを作る時にも使える.

開発環境は

という感じ.



参考にしたもの

ビルドを早くする方法を調べてみたら

cocos2d-x 3.4のStatic LibraryをXcode 6.2で作成してbuildを早くする手順

というページを見つけた.ただしiOS版.これを勘と試行錯誤でMacアプリの場合に応用した.後でちゃんと調べよう.実質参考サイトでやっていることは,iOSシミュレータおよびiOS実機それぞれのアーキテクチャに対応した静的ライブラリの作成と統合(たぶん).その後静的ライブラリの読み込みとcocos2d-xのターゲットの削除.Macでも基本的には同じはず.

静的ライブラリの作成方法

勘と試行錯誤の結晶.よって不具合あるかも?様子見.Xcodeでcocos2d_libs.xcodeprojの設定をした後xcodebuildコマンドによって静的ライブラリを作成した.

cocos2d_libs.xcodeprojの設定

cocos2d-xプロジェクトを開き,次のように操作.画像も参照.

  1. ファイルのリストからcocos2d_libs.xcodeprojを選択する.
  2. 左上のアイコンを押してサイドバーを表示する.
  3. libcocos2d Macを選択する.
  4. 「Build Active Architecture Only」をNoにする.

f:id:rapmocha:20160408032902p:plain

以上.

xcodebuild実行

静的ライブラリ自体は参考ページのRakefile

sh "xcodebuild -project #{PROJECT_PATH} -configuration Release -sdk iphonesimulator7.1 -target #{TARGET_NAME} TARGET_BUILD_DIR=../../build/#{OUTPUT_DEBUG} BUILT_PRODUCTS_DIR=../../build/#{OUTPUT_DEBUG} clean build"

の部分で完成するみたい.よってオプションがわかれば静的ライブラリを作成できそう.まず-sdkオプションについて

xcodebuild -version -sdk

xcodebuildで利用出来るSDKの種類を調べる.Mac用アプリに対応する部分は次のようになっていた.

MacOSX10.11.sdk - OS X 10.11 (macosx10.11)
SDKVersion: 10.11
Path: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
PlatformVersion: 1.1
PlatformPath: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform
ProductBuildVersion: 15C43
ProductCopyright: 1983-2015 Apple Inc.
ProductName: Mac OS X
ProductUserVisibleVersion: 10.11.2
ProductVersion: 10.11.2

勘でmacosx10.11を指定した.-archx86_64にした.TARGET_BUILD_DIRBUILT_PRODUCTS_DIRは試行錯誤の結果,適当な名前にすることにした.以上より,プロジェクトのルート/cocos2d/build/ (cocos2d_libs.xcodeprojのあるディレクトリ)で

PROJECT_PATH="./cocos2d_libs.xcodeproj"
OUTPUT_RELEASE="release"
xcodebuild -project $PROJECT_PATH -configuration Release -sdk macosx10.11 -target libcocos2d\ Mac -arch x86_64 TARGET_BUILD_DIR=$OUTPUT_RELEASE BUILT_PRODUCTS_DIR=$OUTPUT_RELEASE clean build

を実行した.そこそこ時間かかる.** BUILD SUCCEEDED **と表示されたら,プロジェクトのルート/cocos2d/build/release/libcocos2d\ Mac.aができた.

静的ライブラリの読み込みとターゲットの削除

作成した静的ライブラリを読み込み,改めてビルドさせないようにする.

静的ライブラリ読み込み

libcocos2d Mac.aをプロジェクトルートのproj.ios_macにコピーする.これをXcodeのファイルリスト中のFrameworkにドラッグ&ドロップする.画像のように

  • Copy items if needed(たぶん不要)
  • Create folder reference
  • desktopターゲットにチェック

を選択して,Finish.

f:id:rapmocha:20160408032827p:plain

これで読み込めてるはず.

プロジェクトのターゲットのBinary確認

不要かもしれない.[プロジェクトのxcodeprojファイル] → [Build Phasesタブ] → desktopのターゲットを選択し「Link Binary With Libraries」にlibcocos2d Mac.aがあればよし.画像参照.

f:id:rapmocha:20160408032755p:plain

cocos2d_libs.xcodeprojのTARGETS削除

cocos2d_libs.xcodeprojを選択し,libcocos2d Maclibcocos2d iOSを選びcontrol+クリックからDelete.これでlibcocos2d Maclibcocos2d iOSをビルドしようとしなくなるはず.

新しいプロジェクトで静的ライブラリを使う

一度作った静的ライブラリは新しいプロジェクトでも使うことができる(たぶん).少なくともHello Worldプログラムのコンパイルでは問題なかった.手順をまとめておく.

  1. cocos new MyGame -p com.mycompany.MyGame -l cpp -d ~/Documents等で新たなプロジェクトを作る.
  2. libcocos2d Mac.aをプロジェクトルートのproj.ios_macにコピー
  3. Xcodeでproj.ios_macのMyGame.xcodeprojを開く.
  4. libcocos2d Mac.aをXcodeにドラッグ&ドロップでターゲットに気をつけて読み込む.
  5. 一応TARGETS: desktopのLink Binary With Librariesにlibcocos2d Mac.aがあるか確認
  6. cocos2d_libs.xcodeprojのTARGETS2つをDelete.
  7. ビルドする.

たぶんこれで高速にビルドできるはず.