OpenOffice API开发 (六)--makefile 文件

之所以写makefile的文章,是因为OOO的sdk开发并不像 vs 或者 netbean,或其他IDE集成开发,ooo其工程不是用IDE工具自动生成,而是使用Linux下的makefile文件,这和OOO工程是一样的。Ooo工程也是使用Makefile建立的。 makefile在这种巨大的工程特别适合;没有过多的去研究makefile.

如果需要更为详细的makefile 信息的话,参考这位大哥写的 http://blog.csdn.net/liang13664759/article/details/1771246  

我这里不做过多的makefile知识解释。如果是从事过Linux下开发的朋友对makefile肯定相当了解了。这里只针对本样例中的sdk 开发中的一些所要用到的Makefile 做粗糙分析;


PRJ=../../../../..
SETTINGS=$(PRJ)/settings

include $(SETTINGS)/settings.mk
include $(SETTINGS)/std.mk
include $(SETTINGS)/dk.mk

本样例中的makefile中,前面这些  PRJ=../../../..这是makefile中的变量定义;

include $(SETTINGS)/settings.mk 其实就是说包含sdk安装目录下../../../../../settings/settings.mk这个mk文件;

COMP_NAME=ProtocolHandlerAddon_java
OUT_COMP_CLASS=$(OUT_CLASS)/$(COMP_NAME)
OUT_COMP_MISC=$(OUT_MISC)/$(COMP_NAME)
COMP_PACKAGE=$(OUT_BIN)/$(COMP_NAME).$(UNOOXT_EXT)
COMP_PACKAGE_URL=$(subst \\,\,"$(COMP_PACKAGE_DIR)$(PS)$(COMP_NAME).$(UNOOXT_EXT)")
COMP_JAR_NAME=$(COMP_NAME).uno.jar
COMP_JAR=$(OUT_CLASS)/$(COMP_JAR_NAME)
COMP_MANIFESTFILE=$(OUT_COMP_CLASS)/$(COMP_NAME).uno.Manifest
COMP_UNOPKG_MANIFEST = $(OUT_COMP_CLASS)/$(COMP_NAME)/META-INF/manifest.xml
COMP_COMPONENTS=$(COMP_NAME).components

这里也是定一些产品相关的变量。包括组件名称 组件所生成的类目录,打包文件,生成的jar文件名;打包文件文件路径 

JAVAUI = LoginDialog.java
DATABASE = DBConnection.java
OFFICE = OpenOfficeContext.java
JAVAFILES  = ProtocolHandlerAddon.java ErrorLog.java

CLASSFILES = $(patsubst %.java,$(OUT_COMP_CLASS)/%.class,$(JAVAFILES))

SDK_CLASSPATH = $(subst $(EMPTYSTRING) $(PATH_SEPARATOR),$(PATH_SEPARATOR),$(CLASSPATH)\
		$(PATH_SEPARATOR)$(OUT_COMP_CLASS))

这些也是定义一些文件名变量,这些变量告诉java编译器要编译那些java文件,比如此样例中写了loginDialog.java,DBConnection.java, OpenOfficeContext.java ErrorLog.java ProtocolHandlerAddon.java这五个java文件,假设增加了其他的java文件,可以在这些变量名后面添加,(注意多个java文件是用一个空格,多个空格偶尔会有出错) ,也可以单独建立一个变量名来存放你所要增加的java文件;

CLASSFILES 这个是这些文件的具体路径
SDK_CLASSPATH 这个是sdk安装路径 
 
include $(SETTINGS)/stdtarget.mk

$(OUT_COMP_CLASS)/%.Manifest :
	-$(MKDIR) $(subst /,$(PS),$(@D))
	@echo RegistrationClassName: ProtocolHandlerAddon> $@

$(CLASSFILES) : $(JAVAFILES)
	-$(MKDIR) $(subst /,$(PS),$(@D))
	$(SDK_JAVAC) $(JAVAC_FLAGS) -classpath "$(SDK_CLASSPATH)" -d $(OUT_COMP_CLASS) $(JAVAFILES) $(JAVAUI) $(DATABASE) $(OFFICE)

这里的$(CLASSFILES) : $(JAVAFILES)
    -$(MKDIR) $(subst /,$(PS),$(@D))
    $(SDK_JAVAC) $(JAVAC_FLAGS) -classpath "$(SDK_CLASSPATH)" -d $(OUT_COMP_CLASS) $(JAVAFILES) $(JAVAUI) $(DATABASE) $(OFFICE)
这其实相当于这样的作用使用javac.exe ProtocolHandlerAddon.java ErrorLog.java LoginDialog.java DBConnection.java OpenOfficeContext.java 类似

说白了就是使用java编译器编译java指定目录下的java文件,并将生产的java文件放在指定路径;

如果出现中文编码的问题,那么 在 $(JAVAC_FLAGS) -classpath 前面加上-encoding UTF-8; 使用UTF-8进行编码;


$(COMP_JAR) : $(COMP_MANIFESTFILE) $(CLASSFILES)
	-$(DEL) $(subst \\,\,$(subst /,$(PS),$@))
	-$(MKDIR) $(subst /,$(PS),$(@D))
	$(SDK_JAR) cvfm $@ $< -C $(OUT_COMP_CLASS) .

这个命令式告诉编译器怎么生成jar包 如果你的组件需要导入一些图片,你可以在你的工程目录下建立一个文件夹,比如image ,在里面存放图片。然后再

$(SDK_JAR) cvfm $@ $< -C $(OUT_COMP_CLASS) .
后面加上 image/*  然后在下面的这部分的$(COMP_PACKAGE): 后面加上 image/*  这样就会把目录下所有文件打包到jar包和组件里;eg:

$(COMP_PACKAGE) : $(COMP_JAR) Addons.xcu ProtocolHandler.xcu image/* $(COMP_UNOPKG_MANIFEST) $(COMP_COMPONENTS)

$(COMP_PACKAGE) : $(COMP_JAR) Addons.xcu ProtocolHandler.xcu $(COMP_UNOPKG_MANIFEST) $(COMP_COMPONENTS)
	-$(DEL) $(subst \\,\,$(subst /,$(PS),$@))
	-$(MKDIR) $(subst /,$(PS),$(@D))
	-$(MKDIR) $(subst /,$(PS),$(OUT_COMP_MISC))
	$(COPY) $(subst /,$(PS),$<) $(subst /,$(PS),$(OUT_COMP_MISC))
	cd $(subst /,$(PS),$(OUT_COMP_MISC)) && $(SDK_ZIP) ../../bin/$(@F) $(<F)
	$(SDK_ZIP) -u $@ Addons.xcu ProtocolHandler.xcu $(COMP_COMPONENTS)
	cd $(subst /,$(PS),$(OUT_COMP_CLASS)/$(subst .$(UNOOXT_EXT),,$(@F))) && $(SDK_ZIP) -u ../../../bin/$(@F) META-INF/manifest.xml

这个是打包组件用的。告诉zip工具打包jar文件,xcu文件,等


如果你的的插件里的某一些函数要引用到其他的jar包,你必须将他们打包到组件中去。这里我们需要写入到的mainfest文件里去!

比如:

$(OUT_COMP_CLASS)/%.Manifest :
	-$(MKDIR) $(subst /,$(PS),$(@D))
	@echo  RegistrationClassName: PatentAnalyse> $@
	@echo  Class-Path: lib/axis.jar>> $@
	@echo  lib/commons-discovery-0.2.jar>> $@
	@echo  lib/javax.wsdl_1.6.2.v201005080631.jar>> $@
	@echo  lib/jaxrpc.jar>> $@
	@echo  lib/saaj.jar>> $@
	@echo  lib/org.apache.commons.logging_1.0.4.v201005080501.jar>> $@

这里我就将要使用java webservice必须引入的jar包一起打包到了组件中了。只有这样,你在程序中import的这些jar包才会有用!

而且必须是这种格式,@echo 与你要到的包之间必须是两个空格!必须是用Class-Path: 然后,一个jar包用一行。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值