tolua++自动生成绑定代码时,不支持插入预编译头文件。虽然可以插入直接的C++代码例如
,如$#include xxxx,但插入位置并没有位于文件头。对于使用预编译头的大型工程而言,
尤其是某个绑定代码依赖了工程里其他很多东西,更万恶的是预编译头文件里居然包含很多
自己写的代码时,支持插入预编译头文件这个功能很重要。
说白了,也就是要让tolua++在生成的代码文件开头插入#include "stdafx.h"。
修改代码其实很简单。tolua++分析pkg文件及生成代码文件其实都是通过lua代码完成的。
在src/bin/lua目录下,或者在源代码里toluabind.c里(把对应的lua代码直接以ASCII码值
复制了过来)即为这些代码。
首先修改package.lua里的classPackage::preamble函数,可以看出该函数会生成一些代码
文件头,模仿着即可写下如下代码:
if flags['I'] then
output( '#include "..flags['I'] )
end
从上下文代码可以看出flags是个全局变量,保存了命令行参数。
然后修改tolua.c代码文件,让其往lua环境里传入命令行参数:
case 'I':setfield(L,t,"I",argv[++i];break;
本来,这样修改后基本就可以让tolua++支持通过命令行指定是否插入预编译头:
tolua++ -o test.cpp -H test.h -I stdafx.h test.pkg
不过事情并非很顺利,通过开启TOLUA_SCRIPT_RUN宏来让tolua++通过src/bin/lua下的lua
代码来完成功能,结果后来发现basic.lua似乎有问题。无奈之下,只好用winhex之类的工
具把修改过的package.lua转换为unsigned char B[]置于toluabind.c里,即可正常处理。