本文详解MTK的编译过程,并会根据我的理解来更新。阅读上文对本文的一些文件和术语会有很好的帮助。导读:Comp.mak完成模块编译连接,生成binGsm2.mak主编译文件,完成clean,remake,new等工作XXX_GPRS.mak客户私有的配置,根据客户的不同,而设定不同的配置文件Option.mak工程中的基本配置及宏定义文件Verno_XXX.bld版本文件Custom.bld要保证在客户版本中都使用相同的配置的地方要写在这里,这个里面的一些文件不能被改变第一步:1.Make.bat命令首先调用ChgFileMode.bat,将编译过程中需要用到的文件的只读属性修改为可读写,再调用make2.pl。2.Make2.pl的主要工作就是匹配gsm2.mak的参数,然后通过命令system("${makeCmd}-f${makeFolder}${myMF}-r-RCUSTOMER=$customPROJECT=$project$action");来调用gsm2.mak。具体解析出来就是make-fmake\gsm2.mak-r–RCUSTOMER=工程名PROJECT=gprsnew|update|remake第二步:整个过程如图Gsm2.makOption.makXXX_GPRS.makREL_CR_MMI_GPRS.makUSER_SPECIFIC.mak1.在Gsm2.mak文件的开始处调用了option.mak文件。2.Option.mak又将make\$(strip$(CUSTOMER))_$(strip$(PROJECT)).mak文件包含进来,这个模式匹配结果为:make目录下,工程名称_GPRS.mak,如K500GSD_GPRS.mak。3.在$(strip$(CUSTOMER))_$(strip$(PROJECT)).mak文件中又调用了REL_CR_MMI_$(strip$(PROJECT)).mak文件,这个文件模式具体被解析为make目录下的REL_CR_MMI_GPRS.mak文件。REL_CR_MMI_GPRS.mak这个文件定义了哪些文件需要加入到编译目录中。其中定义了MMI部分的编译目录为MMIDIR=plutommi。在变量CUS_REL_BASE_COMP中定义了资源的编译目录:CUS_REL_BASE_COMP+=$(strip$(MMIDIR))\mmi$(strip$(MMIDIR))\mtkapp$(strip$(MMIDIR))\tool$(MMIDIR)\WIN32FSCUS_REL_BASE_COMP+=$(strip$(MMIDIR))\Customer\CustomerInc\$(strip$(MMIDIR))\Customer\Customize\$(strip$(MMIDIR))\Customer\CustResource\$(strip$(MMI_VERSION))\$(strip$(MMIDIR))\Customer\debug\$(strip$(MMIDIR))\Customer\Images\GameImages\$(strip$(MMIDIR))\Customer\Images\decoder\$(strip$(MMIDIR))\Customer\Res_MMI\$(strip$(MMIDIR))\Customer\ResGenerator\$(strip$(MMIDIR))\Customer\ResourceDLL\$(strip$(MMIDIR))\Customer\Resources\$(strip$(MMIDIR))\Customer\Audio客户的资源需要编译如下文件:CUS_REL_SRC_COMP+=mmiresourcemtkappgdi_armplutommivendorapp图片名称为:CUS_REL_BASE_COMP+=$(strip$(MMIDIR))\Customer\Images\$(strip$(MMI_PROJ))$(strip$(MAIN_LCD_SIZE)),可解析为如:plutommi\customer\images\K500GSD176X220REL_CR_MMI_$(strip$(PROJECT)).mak其中CUS_REL_OBJ_LIST这个变量存储了连接过程中所需要的文件名称4.make\$(strip$(CUSTOMER))_$(strip$(PROJECT)).mak文件的功能。CUSTOM_OPTION定义了所有需要编译进去的功能模块的宏。COMPLIST变量的功能:ifeq($(strip$(RTOS)),NUCLEUS)COMPLIST=nucleusnucleus_intnucleus_ctrl_codenucleus_critical_dataEndif如果操作系统为NUCLEUS,那么COMPLIST为后面的值,COMPLIST为所要编译的文件列表,里面存放了很多.inc文件,展开后就变为config\includestacklib\includeadaptation\includekal\include等等5.option.mak文件的在后面调用了make\USER_SPECIFIC.mak如果使用CPU为ARM,则编译工具目录为如下定义ifeq($(strip$(COMPILER)),ADS)DIR_ARM=c:\progra~1\arm\adsv1_2DIR_ARM:=$(strip$(DIR_ARM))DIR_TOOL=$(DIR_ARM)\binDIR_ARMLIB=$(DIR_ARM)\libDIR_ARMINC=$(DIR_ARM)\includeEndif连接打包工具等为如下几个:DIR_TOOL:=$(strip$(DIR_TOOL))LINK=$(DIR_TOOL)\armlink.exe#LinkerASM=$(DIR_TOOL)\armasm.exe#ARMassemblerLIB=$(DIR_TOOL)\armar.exe#LibrarytoolBIN_CREATE=$(DIR_TOOL)\fromelf.exe#Binarytool下面这段代码告诉我们需要用什么编译工具来编译ifeq($(strip$(COMPILER)),ADS)ifeq($(strip$(COMPILE_MODE)),INST16)CC=$(DIR_TOOL)\tcc.exe#ThumbMode(16bits),usetccCC32=$(DIR_TOOL)\armcc.exe#ARMMode(32bits),usearmccCPPC=$(DIR_TOOL)\tcpp.exe#ThumbMode(16bits),usetccCPPC32=$(DIR_TOOL)\armcpp.exe#ARMMode(32bits),usearmccelseifeq($(strip$(COMPILE_MODE)),INST32)CC=$(DIR_TOOL)\armcc.exe#ARMMode(32bits),usearmccCPPC=$(DIR_TOOL)\armcpp.exe#ARMMode(32bits),usearmccelseCC=$(DIR_TOOL)\tcc.exe#DefaulttccCC32=$(DIR_TOOL)\armcc.exe#ARMMode(32bits),usearmccCPPC=$(DIR_TOOL)\tcpp.exe#ThumbMode(16bits),usetccCPPC32=$(DIR_TOOL)\armcpp.exe#ARMMode(32bits),usearmccendifendifendififeq($(strip$(PLATFORM)),MT6223P)AFLAGS:=-g-littleend-cpuARM7EJ-SEndifCOMMINCDIRS变量在先包含了基本功能模块的inc目录后再包含如下文件COMMINCDIRS+=$(DIR_ARMINC)$(CUSTOM_COMMINC),6.Option.mak中定义了一些附加功能模块的编译模式(是否被编译,被编译成什么样的结果),比如说蓝牙,UART3,WIFI,USB,WAP等等,还有一些编译器的设置。我们的版本号和Scat文件被定义在这个变量中:5056LSCATTERFILE=custom\system\$(strip$(BOARD_VER))\scat$(strip$(PLATFORM)).txtVERNOFILE=make\Verno_$(CUSTOMER).bld.bin文件的名称设置在这个变量TARGNAME=$(CUSTOMER)_$(strip$(SUB_BOARD_VER))_$(PROJECT)_$(strip$(PLATFORM))_$(strip$(CHIP_VER))TST_DB:=$(strip$(TSTDIR))\database_classb然后被包含到Option.mak文件中来,include$(strip$(VERNOFILE))。7.Gsm2.mak文件中new执行的指令new:cleanallcmmgenmmi_feature_checkasngencodegenasnregenoperator_check_liteupdateupdate所执行的指令update:cleanlogcleanbinmcddll_updatecodegenresgencksysdrvremakeremake所执行的指令remake:mcp_checkcleanlogcleanbingenvernolibs$(BIN_FILE)doneresgen用来编译资源文件:Res_XXX.c(echoCUSTOM_OPTION=$(foreachdef,$(BOARD_VER)$(PLATFORM)$(LCD_MODULE)$(EXT_CAM_MODULE)$(CMOS_SENSOR),-D"$(def)")\>$(MMIDIR)\customer\resGenerator\custom_option.txt)首先将CUSTOM_OPTION重定向到custom_option.txt中(typemake\~cus_opt.tmp>>$(MMIDIR)\customer\resGenerator\custom_option.txt)使用tools\strcmpex.exe生成~cus_opt.tmp,~tgt_opt.tmp,~inc.tmp三个文件将~cus_opt.tmp重定向到custom_option.txt中(@del$(MMIDIR)\mmi\TargetOption.txt)&\(copy/Ymake\~tgt_opt.tmp$(MMIDIR)\MMI\TargetOption.txt)再将TargetOption.txt更新一下,将~tgt_opt.tmp重定向到TargetOption.txt中(typemake\~inc.tmp>$(MMIDIR)\customer\resGenerator\custom_include.tmp)再将~inc.tmp重定向到custom_include.tmp中,执行replace_project_name.pl文件,编译Res_XXX.c再执行ResGenerator_HW.bat,编译资源文件。1.??编写目的本文编写的目的主要是从整体上理解MTK的编译过程,以便较快的处理编译中遇到的问题,同时为以后可能的优化编译过程提供参考。2.??简介MTK的编译过程主要是在windows命令行下通过Makefile文件执行相应的perl脚本或c程序,将资源包生成c源程序,并与相应模块的c程序.o,.lib或.obj的中间代码,最终生成在手机上使用的.bin文件和在模拟器上使用的mmiresource.dll资源文件。3.??编译环境A.?????编译工具和辅助工具????????ADS1.2????????ADS1.2_update_848.exe????????MSYS版本:1.0.10????????MinGW版本:3.1.0????????Gcc-core-3.3.1????????Gcc-g++-3.3.1????????ImageMagick版本:6.3.6Q16????????7-zip版本:3.13????????注意:按照联发科技的要求,最好上述软件采用建议的版本,否则可能会出现异常情况,导致不能正常编译。B.?????编译环境搭建????????按默认路径安装ADS1.2,并安装848补丁包????????按默认路径安装Perl????????按默认路径安装7_zip????????安装MinGW先按默认路径安装MinGW安装包,然后解压gcc-core、gcc-g++的压缩包,讲解压后的两个文件夹复制到MinGW安装路径下。?????????安装MSYS????????安装ImageMagick,注意:按默认提示安装到SelectAdditionalTasks时,所有的选择全取消,后面再按默认安装。????????复制7z.exe拷贝..\7_Zip\7z.exe至..\plutommi\Customer\ResGenerator,并改名为7za.exe。????????复制MinGW拷贝..\MinGW至..\Tools\MinGW。????????复制MSYS拷贝..\msys\1.0至..\Tools\MSYS。????????复制ImageMagick拷贝..\ImageMagick-6.2.5-Q16文件夹下全部文件至..\plutommi\Customer\ResGenerator目录下????????设置make.exe改名mingw32-make.exe(..\Tools\MinGW)为make.exe,并放在tools目录下。C.?????编译环境检查????????检查第三方软件安装情况如果确认全部安装,可跳过此步。将custom3rdParty.pl文件拷贝到本机,修改4$sevenZipPath="C:\\Progra1~1\\7-Zip";???5$MinGWPath???="C:\\MinGW";???6$MSYSPath????="C:\\MSYS";然后运行在Tools\chk_env.exe????????检查windows环境变量????????检查MTK中Makefile变量是否正确打开..\make\option.make,检查关于ADS编译器的路径设置ifeq($(strip$(COMPILER)),ADS)???DIR_ARM???????=c:\adsv1_2???DIR_ARM:=$(strip$(DIR_ARM))???DIR_TOOL??????=$(DIR_ARM)\bin???DIR_ARMLIB????=$(DIR_ARM)\lib???DIR_ARMINC????=$(DIR_ARM)\includeEndifD.?????结束现在可以执行MAKE了,例如Makecustomer_namegprsnew_modisMakeCUSTOMER_NAMEgprsnewE.?????搭建编译环境的另一种方法正确安装A中所述软件后,配置custom3rdParty.pl中变量,用该批处理文件自动配置剩余工作。F.搭建编译环境的一种捷径当已经配置好一个MTK工程,需要在另一个工程中搭建编译环境时,有一种便捷的方法,步骤如下:????假设已配置好的工程MAUI.A,待配置的是MAUI.B;????备份MAUI.B的tools目录,如改名为tools_new;????复制MAUI.A的tools目录至MAUI.B的目录下;????用MAUI.B原来的tools目录下所有文件覆盖当前的tools目录,如复制tools_new下所有文件至tools下;????复制MAUI.A下plutommi/Customer/ResGenerator/7za.exe和convert.exe至MAUI.B下的plutommi/Customer/ResGenerator。4.??编译命令与文件MTK编译分资源的编译和代码的编译。1)?????资源的编译a)?????在如下的情况下,需要重新编译资源:????????修改了字符串资源文件(Ref_list.txt)、字库文件(FontRes.c,L_.h)、MMI配置文件(MMI_featuresPLUTO.h)等,这些文件位于..\plutommi\Customer\CustResource\PLUTO_MMI\;????????修改了MMI资源装载配置文件,这些文件位于..\plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI目录下,这个目录下都是Res_.文件,是各个AP或模块的资源装载文件,包括菜单、图片和字符串资源的装载配置;????????注意:Cust.文件是资源编译生成的,不能手动修改。b)?????编译方法进入..\plutommi\Customer目录,执行remakeResource.bat。若是在模拟器上使用,则还需要在VC环境下build一下,就可以看到效果了。c)?????与资源编译相关的文件????????ResGenerator_HW.bat在编译手机目标板工程时,有“new”,“resgen”等选项时,自动调用;????????ResGenerator.bat手机PC模拟器工程中,添加新资源后,需要手动调用;????????remakeResource.bat手机PC模拟器工程中,只替换图片或更新字符串等情况下,需要手动调用;????????res_gen.txt资源编译的log文件,在build目录下;????????Makefile..\plutommi\Customer\ResGenerator\Makefile此文件是资源装载预编译程序的Makefile;????????PopulateRes.c..\plutommi\MMI\Resource\PopulateRes.c执行资源装载,主体是函数PopulateResData(),mtk_resgenerator.exe在执行时会调用该函数;????????MMIDataType.h..\plutommi\mmi\Inc\MMIDataType.h定义AP的ID范围。2)?????代码的编译A.?????编译命令命??令说明Clean清除所有的目标文件、库文件和日志文件,保留目录结构New清除并重新编译所有的文件主要完成工作gsm2.makcleanallcmmgenmmi_feature_checkasngencodegenasnregenoperator_check_liteupdateUpdate扫描资源、代码的改变,有改变的重编,无改变的不编主要完成的工作gsm2.makcleanlogcleanbinmcddll_updatecodegenresgencksysdrvremakeRemake不扫描资源,只扫描代码的改变,有改变的重编,无改变的不编主要完成的工作gsm2.makmcp_checkcleanlogcleanbingenvernolibs$(BIN_FILE)doneB.?????编译相关的文件编译用到的文件主要放在make文件夹中。各个文件的简要说明如下:文件名说明Gsm2.mak编译过程中主要执行的make文件,这个文件从命令行获得编译参数,做出相应的处理。它定义了各个参数的执行过程,包括:new、remake、update等。以及调用其它perl或c程序生成目标文件。Option.mak定义了编译环境中用到的工具及相关的目录,根据大的编译开关定义了小的编译和链接选项。XXX.lisXXX模块的.c文件如plutommi\MMI\MyApp\MyAppSrc\MyAppSrc.cXXX.pthXXX模块的.c文件存放的路径如plutommi\MMI\MyApp\MyAppSrcXXX.defXXX模块用到的编译开关,当XXX模块引用其它模块中在编译开关下定义的变量、函数或宏时,就需要将这个编译开关加进来。XXX.incXXX模块用到的头文件路径,需要将XXX模块引用的头文件及,头文件引用的头文件的路径均要包含进来。如plutommi\MMI\MyApp\MyAppIncXXX_GPRS.mak定义了需要编译的模块列表、编译中包含文件和生成文件的路径,定义trace的头文件路径,全局的编译开关,用户的一些编译选项,最后定义了编译路径和目录。用户可以在这个文件中定义配置。Comp.mak编译和集成模块源文件,编译生成库文件。构建目标代码依赖列表,设置每个模块的编译路径及编译选项,设置生成目标lib的路径,设置生成obj的路径。~buildinfo.tmp包含了在Gsm2.mak和Option.mak中用到的项目和平台名称。~compbld.tmp包含了编译每个模块时的编译信息。目标文件生成的目标文件为.bin文件,位于..\build\proj目录下面,build目录为生成的一个目录。Log文件Log文件同.bin文件一样,也是位于build目录下,如果编译出错,可以在命令行中看到出错的模块,然后到build目录下找对应的Log文件。MT6225r目录包括了每个模块的依赖文件(由mak产生的.dep)。MT6225o目录包含所有生成的obj文件和lib文件。C.?????文件命名规则一般来说MMI程序在plutommi\mmi或者mtkapp下面,程序源文件及头文件命名有一定的规律。以工具箱模块为例,有三个相关目录。Organizer??????程序总目录OrganizerInc?????头文件目录OrganizerSrc?????源文件目录在OrganizerSrc下创建源程序文件Ebook2.c在OrganizerInc下创建程序头文件??EbookProt.h??EbookDefs.h??EbookTypes.h??EbookGprot.h下面介绍每个文件的作用:??????Src.c/.c本程序的主源程序??????Gprot.h用来放本程序的所有函数声明,但此头文件是被别的程序所加载的,也就是说此文件所申明的都是对外接口;??????Gtype.h用来放本程序所需的类型、结构、常量宏定义,此头文件同时被别的程序所加载;??????Gdcl.h包括被其它程序调用的全局变量定义;??????Gexdcl.h包括全局变量的声明,该头文件被别的程序所加载;??????Prot.h用来放本程序的所有函数声明,但此头文件只被本程序的源程序所加载;??????Dcl.h定义仅被本程序所调用的全局变量;??????ExDcl.h包括全局变量的声明,但此头文件只被本程序的源程序所加载;??????Types.h用来放本程序所需的类型、结构、常量定义;??????Def.h用来放本程序的资源ID定义;??????.也可以自己定义程序的命名规则。5.??配置编译选项XXX_GPRS.mak是用户配置文件,用户可以通过修改该文件配置编译选项。1)?????增减编译的模块牵涉到XXX_GPRS.mak中的两个变量:????????COMPLIST列出所有可以被编译成.lib库文件的模块。当在COMPLIST中增加编译的模块时,注意要在make下相应的目录中创建相应的.lis,.inc,.path,.def文件。????????CUS_REL_MTK_COMP列出所有只提供.lib库文件的模块。这些库文件要位于../mtk.lib中。2)?????将含有源文件的模块以库文件的形式编译????????从COMPLIST中去除该模块;????????将该模块加入CUST_REL_MTK_COMP;????????将.lib库文件拷贝至../mtk.lib中;????????删除make下相应的模块目录。3)?????配置编译MoDISMoDIS作为MTK软件开发的重要工具,常常被使用。但是由于在PC端与手机端不可避免存在一定的区别,因此在编译MoDIS时,其配置选项有一些与手机端编译存在一定的区别。在配置好手机端编译的基础上,相应MoDIS的配置还牵涉到:????????CreateMoDIS.ini????????Module.ini????????CreateMoDIS.pl以下分别介绍这三个文件a)?????CreateMoDIS.iniMoDIS的全局配置,有7个部分配置编译:???????GLOBAL_SETTING变量disbale_libs关闭MoDIS编译中不需的手机端模块,例如bootloder模块,此模块在手机端上用于引导系统,但是在MoDIS上,由于并不是真实的目标板环境,因此该模块需要取消。变量enable_libs增加MoDIS编译中所独有的模块,例如modis_fs,由于采用了模拟的文件系统,因此在disbale_libs中加入fs模块后,在enbale_libs上加入modis_fs。???????ENABLE_INC_PATH/DISABLE_INC_PATH增加或减少头文件的搜索路径,其中global为全局路径,其他为相应模块的路径。???????ENABLE_OPTION/DISABLE_OPTION增加或减少宏定义,其中global为全局宏,其他为相应模块或文件的宏。???????ENABLE_FILE/DISABLE_FILE增加或减少相应模块的文件。b)?????Module.iniMoDIS目录下各模块都有.ini文件,通过此类文件,用户可以修改相应模块编译时的头文件搜索路径、宏定义选项。c)?????CreateMoDIS.pl编译MoDIS的批处理文件,在修改一些模块,如增加国笔时需要修改。6.??常见编译错误1)?????mtk_resgenerator.exe不能正常运行。可能是ResGenerator文件夹中的某些文件有错误。一个原因是在ResGenerator文件夹中缺少temp.rgb这个文件,并且不能自动生成。2)?????240X320屏的Font_res.c文件的错误,因为打开了中文字体的编译开关,只需要将mmi_featurespluto.h文件中__MMI_LANG_SM_CHINESE__的编译开关关闭即可。3)?????出现以下错误,"plutommi\mmi\FunAndGames\FunAndGamesSrc\Game.c",line349:Error:C2455E:array[0]found"plutommi\mmi\FunAndGames\FunAndGamesSrc\Game.c",line350:Error:C2455E:array[0]found因为默认的240X320屏幕打开的关于游戏的编译开关下没有游戏,所以需要打开mmi_featurespluto.h文件中的__MMI_GAME_VSMJ_240x320__编译开关。4)?????现象:mmiresource模块生成错误:"plutommi\Customer\custresource\custimgmapext.c",line31:Error:C2456E:undeclaredname,inventing''externintMAX_IMAGE_IDS''"plutommi\Customer\custresource\custimgmapext.c",line31:Seriouserror:C2958E:illegalinconstantexpression:nonconstant''MAX_IMAGE_IDS''plutommi\Customer\custresource\custimgmapext.c:0warnings,1error,1seriouserror原因:改变了屏幕大小后,128X160目录下的图片资源有问题。解决办法:更换128X160目录下的图片资源,重新编译此模块。5)?????现象:FreeclustersareNOTenough.CheckckSysDrv.logfordetail!Tools\make.exe:[cksysdrv]Error1??解决办法:删除掉\custom\system\CCDH26_05C_BB目录下的custom_EMI.ccustom_EMI.hflash_opt.h三个文件。6)?????现象:在新加模块的.c文件中引用一个b.h,产生b.h中的aaa变量没有定义的错误,具体错误如下:原因:没有包含定义aaa变量的头文件a.h。解决办法:在includeb.h之前includea.h7)?????现象:"plutommi\Customer\custresource\CustImgDataHW.h",line19361:Seriouserror:C2934E:duplicatedefinitionof''________CUSTOMER__IMAGES__EMPTYIMAGE_BMP''原因:解决办法:删掉CustImgDataHW.h这个文件重新编译8)?????现象:在链接bin文件时,出现以下错误:Error:L6218E:Undefinedsymbolcustom_setAdvEMI(referredfrombootarm.obj).原因:custominfo.pl文件没有修改,默认只打开CCDH26_05C_GPRS.mak一个文件,并不打开其它定义编译开关的文件,导致custom模块中的有些文件没有编译,所以一些变量在最后链接时显示未定义。解决办法:修改custominfo.pl文件。9)?????现象:编译某个模块,出现错误:Error:L6218E:Error:C2933E:typedisagreementfor''mmi_phb_info_entry_list''原因:调用mmi_phb_info_entry_list函数时传递的参数不正确,或者是函数mmi_phb_info_entry_list在调用时还未定义。解决办法:修改custominfo.pl文件。10)现象:编译时出现字符串未定义的错误,enum_list.h:2046:error:`STR_ENTERTAINMENT_EXPLAIN_WOMANKNOWLEDGE''undeclareere(notinafunction)原因:可能是编译开关没打开,或者是正在使用excel表,readexcel.c中没有添加相关的头文件。还有一种可能是在使用这个字符串ID的模块的make底下的.inc文件中没有将定义这个字符串的头文件路径加上。还要注意防止头文件引用的宏定义是不是重复。11)现象:执行ResGenerator.bat时到输出第一份记录文本文件时当机,并且每次都过不去。原因:安装了Windows的更新程序导致的,具体的可能是因为两个原因,一是安装了MSN最新版的补丁,也有可能是安装了SP3补丁所致建和使用lib用cmd切换到.obj目录下命令armar-create.lib.obj其中.obj是由.c文件编译后生成的。使用的话在.mak里面加上COMPOBJS+=对应的路径记得将lis文件里的.c删除自己写多好呀哈哈。@echooffremremSimpleMakerForBuildDLinkAPPrembuildapplicationtool???rem??version1.0?????remSETCC=armcc.exeSETLIB=armar.exeSETLIBPARAM=-createSETASM=armasm.exeSETLINK=armlink.exeSETFROMELF=fromelf.exeSetSRC_FILES=..\pgc_games\bead\mf_bead_playing.c..\pgc_games\bead\mf_bead_select.c..\pgc_games\bead\mf_bead_start_scene.c..\pgc_games\bead\mf_gameparticle.c..\pgc_games\bead\mf_tanzhu_res.c..\pgc_games\bead\mf_bead_menu.cSetINC_PTH=-I.-I..\pgc_games\bead\mf_bead_playing.c-I..\pgc_games\bead\mf_bead_select.c-I..\pgc_games\bead\mf_bead_start_scene.c-I..\pgc_games\bead\mf_gameparticle.c-I..\pgc_games\bead\mf_tanzhu_res.c-I..\pgc_games\bead\mf_bead_menu.csetDEF_COM=-D..\pgc_games\bead\mf_bead_playing.c-D..\pgc_games\bead\mf_bead_select.c-D..\pgc_games\bead\mf_bead_start_scene.c-D..\pgc_games\bead\mf_gameparticle.c-D..\pgc_games\bead\mf_tanzhu_res.c-D..\pgc_games\bead\mf_bead_menu.csetCCPARAM=-c-cpuARM7EJ-S-littleend-O2-zo-fa-apcs/interworksetOBJ_PATH=.\output\jm_apploadersetLIB_NAME=.\output\jm_apploader\jm_apploader.lib:COMPechodeletefiles...del/q%OBJ_PATH%\.echocompiling...remFOR%%aIN(%SRC_FILES%)DO%CC%%CCPARAM%%INC_PTH%%DEF_COM%%%a-o%OBJ_PATH%\%%a.o-errors%OBJ_PATH%\%%a.logremechocreatearmarchivesfile...rem%LIB%%LIBPARAM%%LIB_NAME%%OBJ_PATH%\.o%CC%%CCPARAM%%INC_PTH%%DEF_COM%..\pgc_games\bead\mf_bead_playing.c-o%OBJ_PATH%\mf_bead_playing.o-errors%OBJ_PATH%\mf_bead_playing.logif%errorlevel%==1gotoerrormf_bead_playing%CC%%CCPARAM%%INC_PTH%%DEF_COM%..\pgc_games\bead\mf_bead_select.c-o%OBJ_PATH%\mf_bead_select.o-errors%OBJ_PATH%\mf_bead_select.logif%errorlevel%==1gotoerrormf_bead_select%CC%%CCPARAM%%INC_PTH%%DEF_COM%..\pgc_games\bead\mf_bead_start_scene.c-o%OBJ_PATH%\mf_bead_start_scene.o-errors%OBJ_PATH%\mf_bead_start_scene.logif%errorlevel%==1gotoerrormf_bead_start_scene%CC%%CCPARAM%%INC_PTH%%DEF_COM%..\pgc_games\bead\mf_gameparticle.c-o%OBJ_PATH%\mf_gameparticle.o-errors%OBJ_PATH%\mf_gameparticle.logif%errorlevel%==1gotoerrormf_gameparticle%CC%%CCPARAM%%INC_PTH%%DEF_COM%..\pgc_games\bead\mf_tanzhu_res.c-o%OBJ_PATH%\mf_tanzhu_res.o-errors%OBJ_PATH%\mf_tanzhu_res.logif%errorlevel%==1gotoerrormf_tanzhu_res%CC%%CCPARAM%%INC_PTH%%DEF_COM%..\pgc_games\bead\mf_bead_menu.c-o%OBJ_PATH%\mf_bead_menu.o-errors%OBJ_PATH%\mf_bead_menu.logif%errorlevel%==1gotoerrormf_bead_menu%LIB%%LIBPARAM%%LIB_NAME%%OBJ_PATH%\.oif%errorlevel%==1gotoerrorechocompiled.gotodone:errormf_bead_playingechoCompilingfilemf_bead_playingerror:%errorlevel%gotodone:errormf_bead_selectechoCompilingfilemf_bead_selecterror:%errorlevel%gotodone:errormf_bead_start_sceneechoCompilingfilemf_bead_start_sceneerror:%errorlevel%gotodone:errormf_gameparticleechoCompilingfilemf_gameparticleerror:%errorlevel%gotodone:errormf_tanzhu_resechoCompilingfilemf_tanzhu_reserror:%errorlevel%gotodone:errormf_bead_menuechoCompilingfilemf_bead_menuerror:%errorlevel%gotodone:errorechomake%LIB_NAME%error:%errorlevel%:done
|
|