资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
客户端DDK编译环境配置说明概要文档主要说明DDK编译环境的部署,如何使用该环境进行客户端代码的编译,环境中一些主要命令、如何扩展一些命令。以及在从VC环境下移植过来后,代码需要改进的一些描述。文章将着重对相关模块下的sources makefile进行描述。主要分以下五个部分,各个部分的详细叙述请参见各章节。1. DDK build server的部署2. DDK环境目录的介绍3. DDK编译工具和操作介绍4. 编译过程描述以及tang工程编译分析5. VC源代码移植一些常见编译错误6. 一些遗留移植和完善工作DDK build server的部署DDK build server是指存在ddk build环境的服务器,可供每个开发人员下载到自己的开发机器,经过简单的配置就能成为本地ddk编译换进的一套机制。DDK build server可供公司各个项目组使用,方便的下载,配置并执行编译功能。目前没有ddk build server部署,大家可以从机器192.168.12.103的共享目录中进行下载。DDK环境目录的介绍从上图中可以看到红圈标识的几个文件和文件夹,下面一一进行介绍:Bin目录:包含了对应系统平台下的整个环境的工具和编译命令,已经进行环境设置的bat等。例如:cl.exe,mc.exe,midl.exe,rc.exe包括编译命令build.exe等。Inc目录:包含了整个环境中的头文件,其中包含的子目录crt,atl,wtl,ddk,api,mfc等包含了各种不同编程框架,crt以及系统sdk的头文件。各个子目录都,对应与相应的环境变量一一对应:Crt $( CRT_INC_PATH) = ddk下载目录inccrtSdk $( SDK_INC_PATH)= ddk下载目录incapiWtl $( WTL_INC_PATH)= = ddk下载目录incwtl80Lib目录:包含了整个编译环境下的所有lib文件(除用户lib),其中包含的子目录atl,crt,mfc,以及不同操作系统对应的库目录。各个子目录与相应的环境变量一一对应:Crt $(CRT_LIB_PATH)= ddk下载目录libcrt*Sdk $( SDK_LIB_PATH)= ddk下载目录libwxp*Src目录:源代码路径,开发人员将需要编译的代码都放在src目录下。Dir文件:是整个环境非常重要的一个文件,dir中记录了当前文件夹需要编译的子文件夹,并以一定格式组织,作为ddk编译时目录路由的凭证。所有在dir目录中的文件夹都会被编译,可以通过删除在dir文件中的目录记录来排除编译某个文件夹。WDK build 工具和操作下表列出了DDK环境中的一些工具盒对应处理的文件类型。DescriptionComponentConsumesBuild utilitiesbuild.exenmake.exesources files, dirs filesmakefile, makefile.def, makefile.incFile that controls the build environmentSetEnv.batFiles that identify what is to be builtdirs, sources, and makefile filesCompilercl.exe.cpp files, .c files, .h filesLinkerlink.exe.obj files, .lib filesSupporting toolsmidl.exerc.exebinplace.exestampinf.exemofcomp.exe.idl files.rc files.inx files.mof filesWindows Auto Code Review (OACR) tooloacrcl.exe, oacrlink.exeoacr.ini, oacruser.ini其中OACR工具是用来做代码的静态分析,可以帮助我们规范代码,排查一些代码中的问题。编译过程描述以及tang工程编译分析环境的设置:命令行窗口的启动,实际上是使用了以下的一段命令语句:C:WindowsSystem32cmd.exe /k D:ddk_buildbinsetenv.bat D:ddk_build chk x86 WinXP这段语句实际打开一个命令行窗口,并且执行Setenv.bat文件从而设置了一系列的环境变量。在目录介绍章节当中提到的环境变量都在这个时候设置好的。编译过程:build.exe实际执行编译的整个过程,大致过程可表示为:Scan:扫描工程文件。编译过程的第一步,扫描整个工程中的文件树(dir文件起作用)并且决定是不是进行目标编译。在扫描结束后,Build工具会根据扫描结果,得到目标的类型,以及决定整个编译过程的细节,包括有哪些步骤需要执行比如pass0,pass1,pass2,并且各个过程的参数有哪些等等。总之就是编译任务执行前的所有准备工作。Pass0:处理源代码。在这个过程中NMAKE会调用一个或多个的工具去处理源代码,比如: Microsoft Interface Description Language (MIDL) compiler (Midl.exe). Other WDK support tools such as the Stamp INF tool (Stampinf.exe) and Managed Object Format (MOF) compiler (Mofcomp.exe). The BinPlace utility (Binplace.exe) to place files.Pass1:编译obj,lib文件。编译源文件生成object文件和库文件。以下的工具会被调用或可能被调用: The C/C+ compiler (Cl.exe). The Resource compiler (Rc.exe). Other WDK support tools such as the Stampinf.exe and Mofcomp.exe. The BinPlace utility (BinPlace.exe) to place files. The linker might be called through the OACR wrapper (Oacrlink.exe).下表表示了一些在pass1过程中可能产生的一些目标文件:TARGETTYPE value in sources fileDescriptionFiles input to pass 1Files created by pass 1Is target complete after pass 1?LIBRARY Static library.h, .c, .cpp.libYesDYNLINKDynamic link library or user-mode driver.h, .c, .cpp.lib(import library)NoDRIVERKernel-mode driver.h, .c.objNoPass2:生成最终的目标文件。在这个过程中linker会将pass1中生成的中间文件链接成最终的目标,比如可执行程序,dll,驱动程序等。以下工具会被使用或可能被使用到: Linker (Link.exe). Resource compiler (Rc.exe). BinPlace utility (BinPlace.exe), to place files. The linker might be called through the OACR wrapper (Oacrlink.exe).Binplace文件:在pass0,1,2三个过程的每个结束时,如果我们在sources文件中定义了对应的PASS0_BINPLACE, PASS1_BINPLACE, PASS2_BINPLACE,那么BinPlace.exe都会被调用,并按照sources中定义的规则进行文件的binplace。具体请参见sources文件分析部分。Tang工程解析在ddk环境下的编译过程都严格的按照上面的步骤进行编译,下面将列举tang项目中的三个不同类型的工程lib,dll,exe 进行分析,主要是分析工程中的Sources文件。SOURCES文件用于描述其所在目录下,有哪些文件参与编译,编译的结果应该是什么(是一个lib还是一个sys还是一个可执行程序),输出目录在哪里,要传递给编译器的各种定义和选项分别是什么,等等。由一个SOURCES文件描述的其实就是一个单独的工程,Build最后会参照SOURCES文件的设置,产生一个指定的目标文件(dll ? lib ? exe ? sys ?)完全依赖于SOURCES文件的写法。CommonLib工程:TARGETNAME=Commonlib/Lib名称TARGETTYPE=LIBRARY/指定工程的类型为Lib工程C_DEFINES= $(C_DEFINES) -DUNICODE -D_UNICODE/指定为unicode编码MSC_WARNING_LEVEL=/W1 /WX/指定警告错误级别USE_MSVCRT=1/使用crtUSE_STL=1/使用STLUSE_ATL=1/使用ATLSTL_VER=70/指定STL版本为7.0MINWIN_SDK_LIB_PATH=$(SDK_LIB_PATH)INCLUDES=$(COMMON_DIR)Inc; $(COMMON_DIR)SupportInc; $(CRT_INC_PATH); $(SDK_INC_PATH); $(SDK_INC_PATH)crtstl70; /工程中引用头文件目录TARGETLIBS=/工程中引用的lib库$(SDK_LIB_PATH)user32.lib $(SDK_LIB_PATH)Kernel32.lib $(SDK_LIB_PATH)Advapi32.lib $(SDK_LIB_PATH)comctl32.lib $(SDK_LIB_PATH)gdi32.lib $(SDK_LIB_PATH)winspool.lib $(DDK_LIB_PATH)nt.lib $(SDK_LIB_PATH)shell32.lib $(SDK_LIB_PATH)ole32.lib $(SDK_LIB_PATH)oleaut32.lib $(SDK_LIB_PATH)psapi.lib $(SDK_LIB_PATH)msxml2.lib $(SDK_LIB_PATH)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号