既然是求甚解,那就要脫離掉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的疑問",我努力解答。