test路徑:/cocos2d-2.1beta3-x-2.1.0/tools/cxx-generator
主要參考的還是readme這個問題件,裏面寫的很詳細:
https://github.com/funkaster/cxx-generator/blob/master/README.md#test
在終端中輸入:sudo port install python27py27-yaml py27-cheetah
如果你沒有安裝python 會提示sudo: port: command not found
這時你需要下載macports http://macports.org進入該網站點擊右上角的Download按鈕進入下載頁面。下載的時候會有很多版本供你選擇,我選擇的是,因爲我的系統版本是10.7.5的而2.1.2是最高版。安裝macports 有幾點注意,要求
1、mac中安裝了Xcode 4.4以上版本,
2、安裝了Command Line Developer Tools,
3、接受Xcode的用戶許可或者運行命令xcodebuild–license。
安裝完畢後先運行sudo port –v selfupdate命令更新到最新版本,然後運行:sudoport install python27 py27-yaml py27-cheetah
沒問題的話終端提示
---> Updating database of binaries: 100.0%
---> Scanning binaries for linking errors: 100.0%
---> No broken files found.
安裝成功。
接下來配置test文件夾下的文件
1.去掉userconf..ini,和user.cfg文件的.sample後綴。
2.配置user.cfg文件
PYTHON_BIN=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7(這是我的路徑)
3.配置 userconf.ini 文件:
[DEFAULT]
androidndkdir=/Users/wangjingjing/cocos2d-x/android-ndk-r8b
clangllvmdir=/Users/wangjingjing/cocos2d-x/clang+llvm-3.1-x86_64-apple-darwin11
cxxgeneratordir=/Users/wangjingjing/cocos2d-x/cocos2d-2.1beta3-x-2.1.0/tools/cxx-generator
4.運行 ./test.sh,如果配置路徑沒有問題終端會提示:
Errors in parsing headers:
1. <severity = Warning,
location =<SourceLocation file None, line 0, column 0>,
details = "argument unusedduring compilation: '-nostdinc++'">
警告不用管,只要沒有錯誤就行。
最後會生成一個simple_test_bindings文件夾包含如下文件:
至此綁定過程就結束了,下面是將生成的文件放到項目中測試。
二、運行test
2、修改.cpp文件的註冊函數:
voidregister_all_autogentestbindings(JSContext* cx, JSObject* obj) {
jsval nsval;
JSObject *ns;
JS_GetProperty(cx, obj, "ts",&nsval);
if (nsval == JSVAL_VOID) {
ns = JS_NewObject(cx, NULL, NULL, NULL);
nsval = OBJECT_TO_JSVAL(ns);
JS_SetProperty(cx, obj, "ts",&nsval);
} else {
JS_ValueToObject(cx,nsval, &ns);
}
obj = ns;
js_register_autogentestbindings_SimpleNativeClass(cx, obj);
}
如果直接修改test.ini中的target_namespace =ts就可以了,綁定的時候你的這段代碼會自動生成的。
3、在AppDelegate中註冊:
先導入#include "autogentestbindings.hpp" 文件
註冊sc->addRegisterCallback(register_all_autogentestbindings);
4、在hello.js文件中找個適當的地方調用測試:
var myClass=newts.SimpleNativeClass();
varmyStr=myClass.returnsACString();
var label = cc.LabelTTF.create(myStr, "Helvetica", 20.0);
三、分析.ini配置文件
1.prefix: 項目的前綴. 對target vm語言來說必須是有效的標示符。通常情況下, 這個名字總是被混合在類名和函數名之間,因爲生成的是自由的函數,所以爲了避免名字的衝突,scripte將生成形如${prefix}.cpp and${prefix}.hpp文件作爲結果。
2.events: a list of identifiers in the formof ClassName#functionName that are events to be called from the native world tothe target vm.
3.被本地的target vm調用的事件,以ClassName#functionName形式定義的標示符清單。
4.extra_arguments: 額外參數傳遞給clang接口。重要的是你能想到這些參數傳遞給“complier”,所以將你能用到的都添加到這裏。如果你想綁定 c++代碼,確保在最後你添加了“-x c++”參數去解析“.h”文件。否則將你的頭文件命名爲“.hpp”。
5.headers: 需要解析的頭文件的清單,通常你將添加一個頭文件然後將其他剩下的文件導入到這個頭文件中轉換。
6.classes: 將被解析的類文件,現在僅僅支持字符串,將來會支持表達式。
7.functions: 從自由函數中分離出來的部分,和類一樣,將來會提供正規的表達式。
8.skip: 不參與binding的Classes::functions或者僅僅是functions的部分。