2010年6月27日星期日

头文件与正确编译

P02项目在Mac、Linux下的makefile是没有头文件的依赖规则的,如果修改了基类的头文件,往往需要重新编译整个工程。

昨天为CEGUI增加句柄功能,需要修改Window基类,以继承RootClass类。但是我在调试的时候,工程会莫名其妙的崩溃,看了一下,怀疑是依赖头文件的源文件没有编译。于是我把CEGUI & CXCentaur全部都编译了一下,并且在相应模块的源文件中打印sizeof(CEGUI::Window)看看是否一致。

结果发现sizeof(CEGUI::Window)大小一致,但是问题没有解决,很有点奇怪:

Window::d_children这个列表本应为空,但是在gdb中打印时,一开始为0,再打印却不为0,我设置了内存断点,但是并没有断下。代码中取d_children size()使用的函数是Window中的getChildCount()函数,于是在CEGUI::Window::getChildCount设置断点看看,却发现gdb提示有3个断点。想了一下,知道了原因:

因为getChildCount函数是定义在头文件中,属于inline函数。这说明还有文件引用了修改的头文件,但是未编译更新。于是我把整个工程rebuild了一次,问题即解决。

如果只是build跨平台版本,无需制作依赖关系,倘若需要在平台下开发调试,不制作依赖关系成本还是过于高昂了。

没有评论:

发表评论