如果要从C++中间导出类或者函数到python,你可能会用到Boost.python,很方便.简洁. 但是boost.python需要编写一个定义文件:
例如:
BOOST_PYTHON_MODULE(yuki)
{
boost::python::def("gettext", yukigettext,
boost::python::args("id"), "Translate message.");
}
这是一个很机械化的过程. 如果你想吧一个dll中所有类导出到python,那将是一个痛苦的过程.
不过现在有一个好东西来了. py++帮你自动生成这些代码(这个天杀的库,网上资料太少了. 折磨的我痛苦啊, 竖中指,不解释).
编译py++步骤:
1: 首先下载gccxml.
从SVN上面下载来:
https://github.com/gccxml/gccxml
然后就是用cmake编译了.
附:
在用cmake编译的时候一定要进入truck文件夹下面的cmake. 而不是GCCXML文件夹. 否则会少很多东西.
再有GCCXML依赖MSVC. 你必须有MSVC6 7 8 9 10其中的一个版本.(目前MSVC11不支持,竖中指,fuck).
2:下载py++
地址:http://sourceforge.net/projects/pygccxml/files/?source=navbar
你需要下载2个包: pygccxml 和 pyplussplus
解压这2个包 .
然后就是用Python安装. (先安装pygccxml 再安装 py++)
2个都安装完成算是OK了.
最后就是用我们刚刚生成的py++来为我们自动生成我们需要的代码了.
新建一个py文件:
import os import sys from pyplusplus import module_builder mb = module_builder.module_builder_t( files=['D:/py++Test/cgh.h','D:/py++Test/cgh2.h'] ,gccxml_path="G:/GCCXML/trunk/bin/Release")#files表示文件名列表, gccxml_path表示gccxml路径 mb.build_code_creator( module_name='libchg_py' )#参数:模块名 mb.write_module('D:/py++Test/chg_py.cc')#参数:写入文件名
这是我自己写的一个py。可以做参考:
#coding:GBK import os import sys import glob reload(sys) sys.setdefaultencoding("GBK") from pyplusplus import module_builder curModuleName="libchg_py" gccxmlPath="G:/GCCXML/trunk/bin/Release" Headpath="D:/py++Test/" Headpath+="*.h" outDir="D:/py++Test/chg_py.cc" AllHeadFiles=glob.glob(Headpath) #获取所有*.h文件 #files表示文件名列表, gccxml_path表示gccxml路径 mb = module_builder.module_builder_t( files=AllHeadFiles ,gccxml_path=gccxmlPath) mb.build_code_creator( module_name=curModuleName)#参数:模块名 mb.write_module(outDir)#参数:写入文件名 print "Export Success."