码迷,mamicode.com
首页 > 其他好文 > 详细

执行build -ceZ 编译驱动前的小动作1-setenv.bat

时间:2016-05-07 08:48:49      阅读:507      评论:0      收藏:0      [点我收藏+]

标签:

    一直很好奇双击ddk的Checked/free Build Environment跳出的cmd对话框能运行build编译驱动(其实App也行),直接用cmd运行build,却提示找不到可运行的命令。开始时,怀疑环境变量Path没有包含build所在的路径导致不能工作,可是向Path追加了build的路径,虽然可以执行build但仍然不能生成sys。

    于是换个思路驱动程序所在的目录下都少不了source/makefile文件,看看这些文件里有没有隐藏什么信息:

source

TARGETNAME=echo
TARGETTYPE=DRIVER

INF_NAME=echo

SOURCES=echo.c

makefile:

!INCLUDE $(NTMAKEENV)\makefile.def

source文件貌似和路径不沾边,倒是makefile隐约跟环境变量有关,到Build Environment看看环境变量NTMAKEENV的值。先声明我把wdk7600安装在C盘根目录下。

技术分享

NTMAKEENV是ddk根目录的一个子目录,看来是ddk安装时设置了一些脚本,并在双击Build Environment时include进来(个人觉得用linux中source比较贴切)。搜索%DDKROOT%/bin目录下哪个文件设置了这个变量:

技术分享

如图,NTMAKEENV由setenv.bat设置。如法炮制,看看有谁引用了setenv.bat这个脚本:

技术分享

然而很可惜,并没有找到谁引用了这个脚本。看来只能在Build Environment这个快捷方式上找门路了。右键快捷方式技术分享

目标中的值为"C:\Windows\System32\cmd.exe /k C:\WinDDK\7600.16385.1\bin\setenv.bat C:\WinDDK\7600.16385.1\ chk x86 WXP"

查看ms 对cmd /k的解释:
如果指定了cmd /C 或 /K,命令行开关后的命令行其余部分将作为命令行处理

按他的意思就是由cmd启动C:\WinDDK\7600.16385.1\bin\setenv.bat,并把参数C:\WinDDK\7600.16385.1\ chk x86 WXP传给它。那好,找到设置NTMAKEENV环境变量的入口了。跟到setenv.bat中看看它做了哪些事(仅罗列一些重要的环境变量):

在文件的开头有一行

set BASEDIR=%1 这里%1就是C:\WinDDK\7600.16385.1\
于是set BASEDIR=%1变成了set BASEDIR=C:\WinDDK\7600.16385.1\

命令行参数有chk x86 WXP,因此脚本依次执行

if /I "%1"=="chk"     set _FreeBuild=false

...

if /I "%1"=="WXP"     set DDK_TARGET_OS=WinXP

...

if /I "%DDK_TARGET_OS%"=="WinXP"    goto WXP

:WXP

set _ddkspec=wxp

set _IA32bit=true

这些变量设置了编译版本,编译后二进制文件的文件结构

然后进入:checked分支,

设置优化选项,

set MSC_OPTIMIZATION=/Od /Oi 

设置编译相关的变量:
set PROJECT_ROOT=%BASEDIR%\src
set PUBLIC_ROOT=%BASEDIR%

设置头文件包含路径
set Lib=%BASEDIR%\lib
set Include=%BASEDIR%\inc\api
set WPP_CONFIG_PATH=%BASEDIR%\bin\wppconfig

设置编译连接工具路径
set NTMAKEENV=%BASEDIR%\bin
set BUILD_MAKE_PROGRAM=nmake.exe
设置crt,sdk,ddk,wdk头文件路径
set CRT_INC_PATH=%BASEDIR%\inc\crt
set SDK_INC_PATH=%BASEDIR%\inc\api
set DDK_INC_PATH=%BASEDIR%\inc\ddk
set WDM_INC_PATH=%BASEDIR%\inc\ddk
设置lib库路径
set SDK_LIB_DEST=%BASEDIR%\lib\%_ddkspec%  --->C:\WinDDK\7600.16385.1\lib\wxp\i386\lib\wxp\i386
set DDK_LIB_DEST=%SDK_LIB_DEST%
set CRT_LIB_PATH=%BASEDIR%\lib\crt\*


正是因为设置了这些inc/lib的路径,因此当我们执行build -cez时不仅能编译驱动程序,还能正确生成native App(有机会会写blog)/win32 App等工程

当一切环境变量设置完成setenv.bat退出,正式进入到cmd交互环境。这时的cmd环境,由于还在同一个终端中,环境变量仍然有效,因此它是一个具有编译环境的强大cmd环境!

执行build -ceZ 编译驱动前的小动作1-setenv.bat

标签:

原文地址:http://blog.csdn.net/lixiangminghate/article/details/51334674

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!