[針對初學者]Cocos 如何提高編譯速度

利用VS對Cocos進行編譯,是一件比較痛苦的事情,但是如何提高編譯速度呢?說下幾種編譯情況:

1 利用Cocos Studio創建C++工程

這裏寫圖片描述
Cocos Studio是一個非常方便的創建Cocos項目工程的工具。
項目名稱:你所創建的項目名稱(最好不要使用中文)
項目路徑:項目存放的位置(路徑中不要存在中文)
引擎版本:也就是Cocos2d-x的版本
引擎語言:我們根據自己的需要選擇需要的語言
編輯器:選上吧,方便我們對於場景的編輯
SDK接入:目前不需要用
接下來着重說下引擎類型,這裏是提高編譯速度的關鍵所在。
(1)預編譯庫
我們先創建一個試試,我創建了一個FromLib的Cocos項目;
先編譯下,編譯用時:30s
然後查看項目目錄大小:245MB
修改一下文件,再進行編譯,用時:25s
不修改文件,再編譯下,用時:26s
再修改,再編譯,用時:33s

1>------ 已啓動生成:  項目: FromLib, 配置: Debug Win32 ------
1>  HelloWorldScene.cpp
1>  複製了 60 個文件
1>  FromLib.vcxproj -> D:\Users\CZW\Documents\Cocos\CocosProjects\FromLib\proj.win32\Debug.win32\FromLib.exe
1>  複製了 0 個文件
========== 生成:  成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========

大部分時間都花在複製那60個文件上面了。通過多次嘗試,發現編譯時間基本都維持在25~35s之間。
上面這些都是爲什麼呢?我們來看看這個項目的main.c

#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h"

USING_NS_CC;

#if _MSC_VER > 1800
#pragma comment(lib,"libcocos2d_2015.lib")
#pragma comment(lib,"libbox2d_2015.lib")
#pragma comment(lib,"libSpine_2015.lib")
#pragma comment(lib,"librecast_2015.lib")
#pragma comment(lib,"libbullet_2015.lib")
#else
#pragma comment(lib,"libcocos2d_2013.lib")
#pragma comment(lib,"libbox2d_2013.lib")
#pragma comment(lib,"libSpine_2013.lib")
#pragma comment(lib,"librecast_2013.lib")
#pragma comment(lib,"libbullet_2013.lib")
#endif

int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // create the application instance
    AppDelegate app;
    return Application::getInstance()->run();
}

可以發現,他是通過每次調用系統庫,來實現對源代碼不必要的編譯,但是這樣每次編譯度需要將這些庫連接到exe文件上。他花費的時間基本都是固定的。
(2)源代碼
下面選擇源代碼創建一個Hello的Cocos項目。
先編譯下,額。。。。。,時間比較長,用時:8分鐘
查看項目目錄大小:好吧,4.59GB
修改一下文件,再編譯下,用時:10s
不修改文件,編譯下:2s
再修改文件,編譯下,用時:8s

1>------ 已跳過生成:  項目: libbox2d, 配置: Debug Win32 ------
1>沒有爲此解決方案配置選中要生成的項目 
2>------ 已跳過生成:  項目: libSpine, 配置: Debug Win32 ------
2>沒有爲此解決方案配置選中要生成的項目 
3>------ 已跳過生成:  項目: libbullet, 配置: Debug Win32 ------
3>沒有爲此解決方案配置選中要生成的項目 
4>------ 已跳過生成:  項目: librecast, 配置: Debug Win32 ------
4>沒有爲此解決方案配置選中要生成的項目 
5>------ 已跳過生成:  項目: libcocos2d, 配置: Debug Win32 ------
5>沒有爲此解決方案配置選中要生成的項目 
6>------ 已啓動生成:  項目: Hello, 配置: Debug Win32 ------
6>  HelloWorldScene.cpp
6>  Hello.vcxproj -> D:\Users\CZW\Documents\Cocos\CocosProjects\Hello\proj.win32\Debug.win32\Hello.exe
6>  複製了 0 個文件
========== 生成:  成功 1 個,失敗 0 個,最新 0 個,跳過 5 個 ==========

發現,其實利用源代碼進行二次編譯時,只是對被修改的文件進行編譯,其他庫文件則不用編譯也不用複製。
OK!對上面一些參數做個對比:

引擎類型 首次編譯用時 項目工程大小 二次修改編譯用時 三次未修改編譯用時 四次編譯用時
預編譯庫 30s 245MB 25s 26s 33s
源代碼 8min 4.59GB 10s 2s 8s

通過上面對比,我們可以發現,雖然預編譯庫首次編譯用時比較短,並且佔用空間比較小。但是從後期開發時間的考慮,還是建議選擇源代碼比較好一點。

2 利用Cocos2d-x工具創建項目

該方法與上面的(2)一樣。有些人不想裝Cocos Studio了就可以利用這種方法就行創建項目。
(1)安裝Python27
建議選擇Python2.7x版本,高版本有些兼容問題。
(2)利用cocos創建工程
啓動dos窗口,輸入命令:cd cocos2d-x-3.10\tools\cocos2d-console\bin
進入cocos2d-x-3.10\tools\cocos2d-console\bin中;先來Cocos命令怎麼用

C:\cocos2d-x-3.10\tools\cocos2d-console\bin>cocos -h

C:\cocos2d-x-3.10\tools\cocos2d-console\bin\/cocos.py 2.1 - cocos console: cocos2d-x 的命令行工具集。

可用的命令:
        run              在設備或者模擬器上編譯,部署和運行工程。
        gen-libs         生成引擎的預編譯庫。生成的庫文件會保存在引擎根目錄的 'prebuilt' 文件夾。
        luacompile       對 lua 文件進行加密和編譯爲字節碼的處理。
        gui              shows the GUI
        deploy           編譯並在設備或模擬器上部署工程。
        package          管理 cocos 中的 package。
        compile          編譯並打包工程。
        framework        管理工程使用的 frameworks。
        gen-simulator    生成 Cocos 模擬器。
        new              創建一個新的工程。
        jscompile        對 js 文件進行加密和壓縮處理。
        gen-templates    生成用於 Cocos Framework 環境的模板。

可用的參數:
        -h, --help                      顯示幫助信息。
        -v, --version                   顯示命令行工具的版本號。
        --ol ['en', 'zh', 'zh_tr']      指定輸出信息的語言。

示例:
        cocos new --help
        cocos run --help

我們需要創建工程,再看cocos new –help

C:\Cocos\Cocos2d-x\cocos2d-x-3.10\tools\cocos2d-console\bin>cocos new --help
usage: cocos new [-h] [-p PACKAGE_NAME] [-d DIRECTORY] [-t TEMPLATE_NAME]
                 [--ios-bundleid IOS_BUNDLEID] [--mac-bundleid MAC_BUNDLEID]
                 [-e ENGINE_PATH] [--portrait] [--no-native]
                 (-l {cpp,lua,js} | --list-templates | -k TEMPLATE_NAME)
                 [PROJECT_NAME]

創建一個新的工程。

positional arguments:
  PROJECT_NAME          設置工程名稱。

optional arguments:
  -h, --help            show this help message and exit
  -p PACKAGE_NAME, --package PACKAGE_NAME
                        設置工程的包名。
  -d DIRECTORY, --directory DIRECTORY
                        設置工程存放路徑。
  -t TEMPLATE_NAME, --template TEMPLATE_NAME
                        設置使用的模板名稱。
  --ios-bundleid IOS_BUNDLEID
                        設置工程的 iOS Bundle ID。
  --mac-bundleid MAC_BUNDLEID
                        設置工程的 Mac Bundle ID。
  -e ENGINE_PATH, --engine-path ENGINE_PATH
                        設置引擎路徑。
  --portrait            設置工程爲豎屏。
  -l {cpp,lua,js}, --language {cpp,lua,js}
                        設置工程使用的編程語言,可選值:[cpp | lua | js]
  --list-templates      List available templates. To be used with --template
                        option.
  -k TEMPLATE_NAME, --template-name TEMPLATE_NAME
                        Name of the template to be used to create the game. To
                        list available names, use --list-templates.

lua/js 工程可用參數:
  --no-native           設置新建的工程不包含 C++ 代碼與各平臺工程。

OK,有了幫助文檔,我們就可以創建工程了,根據幫助,我們需要執行下面的命令。

C:\cocos2d-x-3.10\tools\cocos2d-console\bin>cocos new HelloWorld -p com.helloworld.game -l cpp -d C:\CocosProject\
> 拷貝模板到 C:\CocosProject\HelloWorld
> 拷貝 cocos2d-x ...
> 替換文件名中的工程名稱,'HelloCpp' 替換爲 'HelloWorld'。
> 替換文件中的工程名稱,'HelloCpp' 替換爲 'HelloWorld'。
> 替換工程的包名,'org.cocos2dx.hellocpp' 替換爲 'com.helloworld.game'。
> 替換 Mac 工程的 Bundle ID,'org.cocos2dx.hellocpp' 替換爲 'com.helloworld.game'。
> 替換 iOS 工程的 Bundle ID,'org.cocos2dx.hellocpp' 替換爲 'com.helloworld.game'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章