Dos下运行VC++ console程序的环境设置.doc_第1页
Dos下运行VC++ console程序的环境设置.doc_第2页
Dos下运行VC++ console程序的环境设置.doc_第3页
Dos下运行VC++ console程序的环境设置.doc_第4页
Dos下运行VC++ console程序的环境设置.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Dos下运行VC+ console程序的环境设置 分类: VC+ 2008-10-27 10:29 1973人阅读 评论(0) 收藏 举报 =注:摘录侯俊杰-在 console mode 中使用 C/C+ 编译器C/C+ 编译器需要的环境变数设定古早以来,PC 上的 C 编译器,就需要两个环境变数:LIB:这个环境变数告诉编译器说,必要的 libraries 在哪里(哪个磁碟目录下)INCLUDE:告诉编译器说,必要的 header files 在哪里(哪个磁碟目录下)另外,为了让我们能够在任何 working directory 都叫得到编译器,当然我们必须设定 PATH。从古早以来,一直到现在,C/C+ 编译器都需要这三个环境变数。以 Visual C+ 为例以 Visual C+ 为例,如果安装後的档案布局如下:C:/MSDEV/VC98/BIN : 这里放有编译器 CL.EXEC:/MSDEV/VC98/INCLUDE : 这里放有 C/C+ header filesC:/MSDEV/VC98/LIB : 这里放有 C/C+ standard libraries那麽你可以写一个批次档如下:set PATH=C:/MSDEV/VC98/BIN;C:/MSDEV/COMMON/MSDEV98/BINset INCLUDE=C:/MSDEV/VC98/INCLUDEset LIB=C:/MSDEV/VC98/LIB之所以需要另外设定 PATH=C:/MSDEV/COMMON/MSDEV98/BIN,是因为编译器 CL.EXE 执行时需要 MSPDB60.DLL,而它被安装於 C:/MSDEV/COMMON/MSDEV98/BIN 之中。如果你写的程式不只是单纯的 C/C+ 程式,还用到了 MFC,一样可以在 console mode 下编译,这时候你的环境变数应该如此设定:set PATH=C:/MSDEV/VC98/BIN;C:/MSDEV/COMMON/MSDEV98/BINset INCLUDE=C:/MSDEV/VC98/INCLUDE;C:/MSDEV/VC98/MFC/INCLUDEset LIB=C:/MSDEV/VC98/LIB;C:/MSDEV/VC98/MFC/LIB多指定了 MFC/INCLUDE 和 MFC/LIB,就可以让编译器和联结器找到 MFC 的 header files 和 libraries。如果你还需要用到 ATL,就得在 INCLUDE 环境变数中再加上 C:/MSDEV/VC98/ATL/INCLUDE。=我的VC+安装在D:/Program Files/Microsoft Visual Studio下,所以改写批次档如下:set PATH=D:/Program Files/Microsoft Visual Studio/VC98/Bin;D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Binset INCLUDE=D:/Program Files/Microsoft Visual Studio/VC98/Include;D:/Program Files/Microsoft Visual Studio/VC98/MFC/Includeset LIB=D:/Program Files/Microsoft Visual Studio/VC98/Lib;D:/Program Files/Microsoft Visual Studio/VC98/MFC/Lib然后运行cmd,将以上设置复制粘贴到鼠标闪烁处。如果想要确认路径更改正确,可以键入set命令查看。注:这样的环境变量修改,仅对本次命令行窗口有效,因为它是一个虚拟设备。如果想要每次进入时,不做这个工作。可以运行VCVARS32.BAT然后设置你的环境变量。为了不影响VC+的原本设置方便集成环境的使用,我并没有实际操作,一个简单的复制粘贴也不见得麻烦。另外还可以在我的电脑-属性-高级-环境变量里直接修改,这个修改也是永久性的。到这里,路径就设置好了。下面试操作一下:我在F:/盘保存了一个test.cpp文件作为测试文件。文件内容如下:=#include void main()couthello,然后执行cl test.cpp命令,在F:/盘路径下生成了两个文件,test.obj和test.exe。然后再运行test.exe,就可以看到结果了(输出hello)。下面再举一个例子,也就是下面要学习的makefile文件。测试文件名为mypath.mak(你可以任意取名),依旧存储在当前路径下。=all: echo $(PATH) =运行命令nmake mypath.mak,你可以看到输出结果为你刚才设置过的路径(我的结果是D:/Program Files/Microsoft Visual Studio/VC98/Bin;D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin)。2.产生自己的makefile文件下面是我在网上找到的一个简单的例子及其解说(/it-1104697.html)=下面来看一个简单的例子(以下内容均以Win32平台为例): 文件名:makefile 1. # makefile 2. # this is a example of make file 3. all:a1 a2 4. echo this is all! 5. a1: 6. echo this is a1! 7. a2: 8. echo this is a2! 运行make后,结果如下: this is a1! this is a2! this is all! 现在让我们来分析一下这个简单的规则文件。 第1、2行不用说,一眼就可以看出是注释。在Make规则文件中,注释是以“#”开始,是行注释,和C+中的“/”功能一样。不过你可不能把它放到其它的语句之后,否则就错了。第3行就是规则开始了!all:a1 a2一行中,规则的名字就是all,它通常是目标名(target)。一条规则可以有不止一个名字,像这一行,你也可以把它写成all all2:a1 a2。这时,规则就有了两个名称all和all2。当然,还可以有更多,都看你自己。后面的5、7两行也分别是两条规则的起始。在“:”之后的,就是依赖项。在这一行里,依赖项有两个,分别是a1和a2。这些依赖项可以是其它的规则名(目标名),也可以是文件名。依赖和目标之间的关系就是“依赖关系”。一条规则中,可以有零个(像后面的两条规则)、一个或多个依赖。第4行echo this is all!是命令行。它是执行all规则时要执行的命令。要注意的是,一条规则内的命令要以tab为一行的起始,以表示命令是属于一个规则。一条规则也可以有多条命令,每条命令占一行(要以tab开头)。至于可以使用哪些命令,这完全取决于你使用的OS和SHELL。 当执行make时,它会找到第一条规则。然后,make就会检查依赖和目标之间的关系。如果目标比依赖旧,就执行规则,以更新目标。执行完规则就结束。如何判定目标和依赖的新旧呢?如果目标(文件)不存在,目标的时间就为0;如果目标(文件存在),目标的时间就为文件的修改时间。如果依赖项是一条规则,就执行依赖的规则(这里是一个递归),然后依赖的时间就是当前最新时间;如果是一个存在的文件,就为文件的修改时间,否则就报错。之后,就可以比较目标和依赖之间的关系。不过,有一点特殊的是,在没有依赖项时,依赖的时间为1。 在这个例子中,make先找到规则“all”,发现目标不存在,所以目标的时间为0;然后在查找依赖“a1”,结果“a1”不存在;于是,执行规则“a1”。“a1”不存在,所以它的时间为0,而“a1”没有依赖,它的依赖时间为1;10,所以,执行规则“a1”。然后返回规则“all”,再检查依赖“a2”。“a2”执行过程同“a1”。这时,“all”的目标时间为0,依赖时间为最新时间。于是,执行规则“all”的命令。 当然,大家也可以指定一条规则让make执行,比如:make a1这个命令就是告诉make程序不去找第一条规则,而是规则“a1”来执行。并且我们还可以一次执行多条规则,比如:执行make a1 a2就会连续执行“a1”、“a2”两条规则。 OK,虽然讲得很混乱,但也费了我半天的力气。大家应该有一点了解make规则的执行过程了吧。 =依赖的基本写法如下:Target:Dependence Command=Target可以是文件名。Dependence可以是其它的target名或文件名。Command就是操作系统所运行的命令行。 变量 一个make规则文件有这些内容就已经基本可以工作了。可是,当我们在编译一个程序时,如果有些内容要反复用到,每次都要写一长串的话,是很麻烦的。于是,make就引入了宏这个概念(其实也可以看成简单的脚本语言)。 宏变量的定义如下: var1 = this is a macro demo! var1就是变量名,它的值就是“this is a macro demo!” 如果我们要使用这个变量的值,那只有通过$这个运算符才行$(var1)代表的就是“this is a macro demo!”。 如下makefile 1. var1 = this is a macro demo! 2. all: 3. echo $(var1) 结果输出: this is a macro demo! 用户在执行命令行时也可以定义宏变量。其形式如下: make all var1=”this is a test” 执行结果为: this is a test 我们不仅可以使用自定义变量,还可以通过这种方式使用系统环境变量。这样可以大大方便我们建议灵活的规则。如下makefile 1. all: 2. echo $(WINDIR) 执行结果为: C:/WINDOWS (注意:makefile中的变量是大小写敏感的) =下面介绍makefile文件的一些内置变量:= $代表规则中的目标名(也就是规则名)。 $代表规则中的依赖项目。注意,它只代表规则所有依赖项目中的第一项! 其它还有: $代表规则中所有的依赖项目。 $?代表规则中时间新于目标的依赖项目。 不仅如此,还可以给这些特殊的变量加一些限制。 如: 在规则 debug/out.exe : out.obj 中,$代表debug/out.exe,而$(D)代表目录名debug,$(F)代表文件名out.exe。其它如$(D)、$(F)、$(D)、$(F)、$(?D)、$(?F)与此类似。 =举个例子说明,下面是原始makefile文件内容:=myprog : foo.o bar.o gcc foo.o bar.o -o myprog foo.o : foo.c foo.h bar.h gcc -c foo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论