Cocos2d-xの3を触るようになってから、なんか2よりビルド遅いなーと思ったので、いくつかの方の情報を参考にstatic libraryを作成しようと思いました。
先に言っておきますと真面目な方は下記の方達の情報を参考なさることをお勧めします。
http://qiita.com/g-1/items/01f6c430326dfd125af9
http://qiita.com/KawabataLemon/items/8387b0e54b06308a8693
http://qiita.com/AlecYawata/items/f7077483139c36fef9c9
で自分もつくろうと思ったのですが、そもそも
「Cocos2d-xはCleanされなければ問題ないのでは」
と思ったので寄り道してCocos2d-xをCleanから外す方法を探してみました。
が、見つからない。
標準のCleanコマンドでは見つからないのでやるとしたらカスタムのコマンドを作る必要がありそう。
「まあでもカスタムのコマンドって言ってもビルドされたもの消せばいいだけだし適当にrmすればいけるのでは」
と思って、~/Library/Xcode/DerivedData/ を見てたら、あるじゃないですか、aファイルが。考えてみれば当たり前ですが。
「ん、ここにあるaファイル使えばRakeとか使わなくてもいいのでは」
と思ったので試してみました。
結論からいうと自分の環境では使えました。
手順としては下記のような感じです。
1.適当なCocos2d-xのプロジェクトを作成する
cocos new DummyProject -p com.company.dummy -l cpp -d ./projects/
2.aファイルが欲しいターゲットを選択してビルド
デバイスとシミュレータで一つづつ作っておけば足りると思います。
Releaseビルドが欲しい方は必要に応じてEdit Schemeで変更してください。
3.~/Library/Xcode/DerivedData/(プロジェクト名)/Build/Products 以下からビルドされたaファイルを探す
(Xcodeの設定で出力先を変えている場合はそこから)
4.lipoでデバイス用とシミュレータ用のを結合
lipo -create ./Release-iphoneos/libcocos2dx\ iOS.a ./Release-iphonesimulator/libcocos2dx\ iOS.a -output libcocos2dx\ iOS.a
(Cocos2d-x関連の各aファイル全てに行う)
5.使いたいプロジェクトからCocos2d-x関連ビルドのTARGETを削除する
(ヘッダファイルは使うのと、必要に応じてcocos2d-xのソースを追いたい時があるので、cocos2d_libs.xcodeproj 自体は削除しないで残しておきます)
6.先ほど作成したaファイルたちをプロジェクトに追加してやる
7.(゚д゚)ウマー
この方法のメリット・デメリットは
【メリット】
・Rakeとかxcodebuildの使い方をよくわからなくてもXcodeのGUIでBuildSettingとか設定できる
【デメリット】
・手順を整理してみるとやっぱRakeの方が楽なんじゃないか感がある
・Rakeコマンドなどは一度作っておけば以後も一発で出来るので便利
僕はStaticLibなんてそうそう作りなおすことは無いので、とりあえずこれでしばらく使ってみます。
追記:
static libraryに差し替えたあと、場合によっては、リンク時にワーニングが出るかもしれません。
「PIE disabled. Absolute addressing〜〜〜」
こういうのが出た場合は、
Dont create position independent executables を YES にしましょう。