OpenOffice条件编译探讨

来源:互联网 发布:linux 统计文件夹 编辑:程序博客网 时间:2024/06/10 07:09

条件编译实现探讨

 

大型软件一般有条件编译宏,定制功能一般都会用编译宏加以限制。在PM出版本时,打开或关闭makefile文件中的编译开关,方便的实现功能的增减,以此快速定制版本。

OpenOffice由于不需要定制功能的开发,因此对具体功能没有引入条件编译。为了保留劳动成果、方便版本的定制,略做修改实现OpenOffice的条件编译。

 

一、实现思路:

为了方便管理需要找到一个全局的makefile文件,以现在的认识认为加在solenv模块中较为合适。Solenv 是各模块中唯一没有依赖关系的模块,即其不依赖与任何其它模块,看成是依赖树的根节点,其它的模块均要直接或间接的依赖于该节点.其它的模块均要直接或间接的依赖于该节点.编译整个工程时,该模块首先要被编译,然后依赖于该模块的子模块根据时间标签以及依赖规则实现编译.solenv是控制编译的核心,里面包含了不同的编译命令,编译文件类型,不同平台下的编译规则以及不同编译器的包等等.这些命令均是写在makefile文件中,这样写的优势在于在删除和添加不同的模块时,不需要修改solven中的编译规则,而仅仅修改下面子模块文件即可。

在子模块中,每个makefile文件开始总要包含settings.mk文件,该文件根据   不同的操纵系统(FreeBSD,windows unix),不同的编译器以及编译的文件套件版本设置了全局的宏, 会根据通过configure.guess文件得到的操作系统平台设置不同的宏.由于其全局关联性以及获取系统宏的特性,认为将条件编译宏定义在这里比较合适。

 

对于makefile文件中的条件编译则需要将编译宏写在congfigure后生成的对应平台的source文件中,如LinuxX86Env.Set.sh

对于xml语言文件则暂时没有找到方法来条件编译,只能复制一个文件的拷贝,引入这些资源文件的代码中使用条件编译宏区别导入。

二、实现DEMO:

a)    增加makefile文件定义条件编译宏:

添加文件/solenv/inc/conditional.mk

内容:

MKFILENAME:CONDITIONAL.MK

 

CSEFS += -DCONDITIONAL_TEST

b) 定义全局条件编译宏

在/solenv/inc/settings.mk中增加

.INCLUDE : conditional.mk

c)

在configure后生成的LinuxX86Env.Set.sh(此为环境LinuxX86下)文件中加入全局宏

CONDITIONAL_TEST = “true”

d) 在新增功能开发时使用:

#if define(CONDITIONAL_TEST)

新代码。。。。。

#else

旧代码(如果有的话)。。。。。

#endif

 

在所需修改的makefile文件中添加:

.IF "$(CONDITIONAL_TEST)"=="true"

新设置...

.ENDIF

 

如果某个版本不需要此功能就可以在conditional.mk将“CDEFS += -D CONDITIONAL_TEST”这一句注掉,代码可保留在主干版本上,供参考。特定版本需要此功能时再将宏放开。开发定制功能亦可以用宏括起来。出版本时修改makefile文件取舍功能,对版本进行定制。

 

此方案还在尝试与改进中,不断出现新的问题需要完善
原创粉丝点击