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�Clicense。
安装完毕后先运行sudo port �Cv 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
1、将这两个文件夹添加到项目的libs文件夹下。
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的部分。