ライブラリだけ予めビルドしておく

`cocos new`コマンドで新しくプロジェクトを作ると、ライブラリを含め全てソースからビルドするように設定されます。ライブラリ内の細かい動きまで調整できて便利なんですが、普段ほとんど編集しない割にはちょっとcleanしたいときなんかに1からフルビルドされてしまうのは、なにかと面倒です。
ver3.3辺りからライブラリだけをビルドするツールが同梱されているので、それの使い方を紹介します。

## gen-prebuilt
`tools/gen-prebuilt`以下にスクリプトが入っています。READMEの通りに`gen_prebuilt_libs.py` => `module_organize.py`を順に実行すればヘッダとオブジェクトが生成されます。前者はライブラリのビルドを、後者はライブラリと必要なヘッダをまとめてくれますが、プロジェクトの構成次第では後者は不要かもしれません。ちなみにcocos2d-x3.6とxcode6.4で試したところエラーが出たので少し修正しました。

```diff
diff --git a/frameworks/cocos2d-x/build/cocos2d_libs.xcodeproj/project.pbxproj b/frameworks/cocos2d-~
index dfc045f..a64c03e 100644
--- a/frameworks/cocos2d-x/build/cocos2d_libs.xcodeproj/project.pbxproj
+++ b/frameworks/cocos2d-x/build/cocos2d_libs.xcodeproj/project.pbxproj
@@ -9524,7 +9524,6 @@
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../external/free~
-                               VALID_ARCHS = "arm64 armv7";
                        };
                        name = Debug;
                };
@@ -9556,7 +9555,6 @@
                                SDKROOT = iphoneos;
                                TARGETED_DEVICE_FAMILY = "1,2";
                                USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../external/free~
-                               VALID_ARCHS = "arm64 armv7";
                        };
                        name = Release;
                };
```

```diff
diff --git a/frameworks/cocos2d-x/tools/gen-prebuilt/build_config.json b/frameworks/cocos2d-x/tools/~
index 0c250ef..9563a83 100644
--- a/frameworks/cocos2d-x/tools/gen-prebuilt/build_config.json
+++ b/frameworks/cocos2d-x/tools/gen-prebuilt/build_config.json
@@ -2,11 +2,11 @@
     "xcode_proj_info" : {
         "build/cocos2d_libs.xcodeproj" : {
             "outputdir" : "prebuilt",
-            "targets" :[ "build all libs" ]
+            "targets" :[ "libcocos2d" ]
         },
         "cocos/scripting/lua-bindings/proj.ios_mac/cocos2d_lua_bindings.xcodeproj" : {
             "outputdir" : "prebuilt",
-            "targets" : [ "build all lualibs" ]
+            "targets" : [ "libluacocos2d" ]
         }
     },
     "win32_proj_info" : {
```

（※追記）実機でビルドする場合などのために、Build Active Architecture OnlyをNOにしておきます。

```diff
diff --git frameworks/cocos2d-x/build/cocos2d_libs.xcodeproj/project.pbxproj frameworks/cocos2d-x/build/cocos2d_libs.xcodeproj/project.pbxproj
index b66e1f8..a64c03e 100644
--- frameworks/cocos2d-x/build/cocos2d_libs.xcodeproj/project.pbxproj
+++ frameworks/cocos2d-x/build/cocos2d_libs.xcodeproj/project.pbxproj
@@ -9521,7 +9521,6 @@
 					"\"$(SRCROOT)/../external/websockets/prebuilt/ios\"",
 					"\"$(SRCROOT)/../external/chipmunk/prebuilt/ios\"",
 				);
-				ONLY_ACTIVE_ARCH = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
 				USER_HEADER_SEARCH_PATHS = "$(inherited) $(SRCROOT)/../external/freetype2/include/ios $(SRCROOT)/../external/curl/include/ios $(SRCROOT)/../external/webp/include/ios $(SRCROOT)/../external/tiff/include/ios $(SRCROOT)/../external/jpeg/include/ios $(SRCROOT)/../external/png/include/ios $(SRCROOT)/../external/websockets/include/ios $(SRCROOT)/../external/chipmunk/include/chipmunk $(SRCROOT)/../external/freetype2/include/ios/freetype2";
diff --git frameworks/cocos2d-x/cocos/scripting/lua-bindings/proj.ios_mac/cocos2d_lua_bindings.xcodeproj/project.pbxproj frameworks/cocos2d-x/cocos/scripting/lua-bindings/proj.ios_mac/cocos2d_lua_bindings.xcodeproj/project.pbxproj
index df1cdb5..f3bd4c3 100644
--- frameworks/cocos2d-x/cocos/scripting/lua-bindings/proj.ios_mac/cocos2d_lua_bindings.xcodeproj/project.pbxproj
+++ frameworks/cocos2d-x/cocos/scripting/lua-bindings/proj.ios_mac/cocos2d_lua_bindings.xcodeproj/project.pbxproj
@@ -1256,7 +1256,6 @@
 				HEADER_SEARCH_PATHS = "";
 				IPHONEOS_DEPLOYMENT_TARGET = 5.1;
 				LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../../../external/lua/luajit/prebuilt/ios";
-				ONLY_ACTIVE_ARCH = NO;
 				PRODUCT_NAME = "libluacocos2d iOS";
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
```

## リンクする
あとはリンクするだけです。まず元々あったライブラリへの参照を消します。
![MyLuaGame_xcodeproj.png](https://qiita-image-store.s3.amazonaws.com/0/2490/e7e5b079-4368-96c6-ed4d-7ad2f3552c86.png)
ファイル自体は残しておかないとなので、MoveTrashせずにRemoveReferenceします。依存関係なんかもxcodeが良しなにやってくれるので消すだけで大丈夫です。
あとは他のライブラリと同様にTARGETS => General => Linked Frameworks and Librariesから追加します。
![スクリーンショット 2015-07-03 14.22.07.png](https://qiita-image-store.s3.amazonaws.com/0/2490/d877e253-e34d-d04d-4868-6d26136e415b.png)