学习windows编程(2)--环境准备,不用IDE编写程序
既然是求甚解,那就要脱离掉IDE,保证每个字符都是经过思考产生出来的,其实我们脱离掉IDE环境,更能够了解到每一步的执行是怎么样的,IDE到底在你选择项目、创建项目的时候为了做了哪些事情,还有一个好处就是,当你想写一个小的测试程序的时候,你就不用打开VC,而直接用文本编辑器编写好,直接在命令行中编译运行就可以看到结果了,节约了不少时间。
下面,我们就来看看怎么做才可以脱离IDE工作。
1. 在VC6安装好的前提下,win+R,输入cmd,在出现的命令行窗口中试下"nmake"命令,如果能执行该命令,那就可以进行下面的操作,否则需要按照步骤2中的操作设置环境变量。如果学习过java的同学,或者使用过linux的同学,应该对这个很熟悉。
2. 在cmd环境下,可以使用echo %path%命令,来显示一下现在系统中的环境变量路径。或者,右键点击“我的电脑”,在出现的“属性”对话框中,选择“Advanced”Tab页,在 “Environment Variables”中,“用户环境变量”里面找到“path”,点击修改。
3. 找到你电脑中nmake.exe所在的地方,我电脑中为“d:Program FilesMicrosoft Visual StudioVC98BinNMAKE.EXE”,就将这个路径加入到path中,因为有可能大家电脑的环境变量中还有Platform SDK和其他版本VS的路径,所以希望使用哪个,就将哪个放到最前面。
在这个目录下,你还可以看到有其他的exe程序,有些我们之后也会使用到,比如CL.EXE和LINK.EXE,还有一个VCVARS32.BAT之后我们也会稍微介绍一下。
4. 设置完成后,重新开启一个cmd,使用echo %path%命令查看刚刚的路径是否添加上去了,是否是在最前。
再进行步骤1的操作,看看是否可以执行nmake命令。
最终得到的结果为:
1 D:>nmake2 3 Microsoft (R) Program Maintenance Utility Version 6.00.8168.04 Copyright (C) Microsoft Corp 1988-1998. All rights reserved.5 6 NMAKE : fatal error U1064: MAKEFILE not found and no target specified7 Stop.5. 当设置完NMAKE.EXE成功后,你可以试着执行一下CL.EXE命令,如果报出一个找不到mspdb60.dll,不用慌张,那是因为还有一个路径没有设置。
在电脑中寻找mspdb60.dll文件,我的电脑中路径为“d:Program FilesMicrosoft Visual StudioCommonMSDev98BinMSPDB60.DLL”,从路径名称可以看到,这应该是属于Dev环境的一个公共文件,这里我们不管它具体的,直接将路径加入path中,刚刚加入的路径之后,两个路径之间记得用英文字符的分号(;)分隔开来。
6. 同样,设置path,重启cmd窗口,echo查看下设置是否成功,然后执行cl,link命令。
结果如下:
1 D:>cl2 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x863 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.4 5 usage: cl [ option... ] filename... [ /link linkoption... ]link
1 D:>link 2 Microsoft (R) Incremental Linker Version 6.00.8168 3 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. 4 5 usage: LINK [options] [files] [@commandfile] 6 7 options: 8 9 /ALIGN:#10 /BASE:{address|@filename,key}11 /COMMENT:comment12 /DEBUG13 /DEBUGTYPE:{CV|COFF}14 /DEF:filename15 /DEFAULTLIB:library16 /DELAY:{NOBIND|UNLOAD}17 /DELAYLOAD:dll18 /DLL19 /DRIVER[:{UPONLY|WDM}]20 /ENTRY:symbol21 /EXETYPE:DYNAMIC22 /EXPORT:symbol23 /FIXED[:NO]24 /FORCE[:{MULTIPLE|UNRESOLVED}]25 /GPSIZE:#26 /HEAP:reserve[,commit]27 /IMPLIB:filename28 /INCLUDE:symbol29 /INCREMENTAL:{YES|NO}30 /LARGEADDRESSAWARE[:NO]31 /LIBPATH:dir32 /LINK50COMPAT33 /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4}34 /MAP[:filename]35 /MAPINFO:{EXPORTS|FIXUPS|LINES}36 /MERGE:from=to37 /NODEFAULTLIB[:library]38 /NOENTRY39 /NOLOGO40 /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}41 /ORDER:@filename42 /OUT:filename43 /PDB:{filename|NONE}44 /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}45 /PROFILE46 /RELEASE47 /SECTION:name,[E][R][W][S][D][K][L][P][X]48 /STACK:reserve[,commit]49 /STUB:filename50 /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]51 /SWAPRUN:{CD|NET}52 /VERBOSE[:LIB]53 /VERSION:#[.#]54 /VXD55 /WARN[:warninglevel]56 /WINDOWSCE:{CONVERT|EMULATION}57 /WS:AGGRESSIVE到这里,我们的环境设置算是完成了一半,基本能够应付不需要使用到某些特定库和头文件的情况,至于使用到库和头文件的情况,还是等我们具体遇到的时候再进行相应的设置可以记得更清楚,这里做个小例子,来看看咱们设置得对不对,照旧例,还是hello world.
随便进入某个目录,创建一个hello.c
内容很简单,printf一串字符吧。
用你最喜爱的文本编辑器写下下面的代码:
1 #include <stdio.h>2 3 int main()4 {5 printf("abcdefg.
");6 return 0;7 }然后进入命令行,在命令行中进入代码所在的目录,我这里是d: est
全部执行过程如下:
1 D:>cd test 2 3 D: est>cl hello.c 4 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 5 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. 6 7 hello.c 8 Microsoft (R) Incremental Linker Version 6.00.8168 9 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.10 11 /out:hello.exe12 hello.obj13 14 D: est>hello.exe15 abcdefg.可以看到cl hello.c就编译出来了hello.exe,执行hello.exe得到输出。 So easy是不是?
But这里提几个问题,看看你能不能回答出来。
1. 这里是hello.c,如果是hello.cpp,cl的行为有没有不同?
2. 如果是两个或多个文件,那使用cl是否可以直接编译出来exe文件?
3. 将入口修改为void main()是否可以,或者void start()呢?
4. stdio.h大家都知道是C的标准库内容,windows是如何将它合入到系统中去的呢?
5. 同样,stdio.h只是头文件,而具体函数实现是在lib库中,windows又是如何将其合到exe文件中的呢?
6. 刚刚我们打印的是英文字符,那如果我们要打入中文"你好,世界",结果会怎样,到底是为什么呢?
这其实也是我的疑惑,也是下一篇文章要讨论的内容,暂定题为"hello.c的疑问",我努力解答。
补充:软件开发 , C语言 ,