若想深入理解程式碼的每一個細節,脫離整合開發環境(IDE)是最好的方式。當你不再依賴 Visual Studio 等工具自動產生專案檔、設定編譯選項時,你會被迫思考每一行指令的含義,進而真正掌握編譯、連結的完整流程。此外,撰寫小型測試程式時,只需用文字編輯器寫好原始碼,直接在命令提示字元下編譯執行,省去開啟龐大 IDE 的時間,極大提升效率。
安裝好 VC6 後,按 Win+R 輸入 cmd 開啟命令提示字元,輸入 nmake。若顯示版本資訊而非錯誤,表示環境已就緒;否則需手動設定環境變數。有 Java 或 Linux 經驗的開發者對此應不陌生。
在命令列輸入 echo %path% 可查看目前路徑;或以滑鼠右鍵點選「我的電腦」→「內容」→「進階」→「環境變數」,在「使用者環境變數」中編輯 path。
找到 nmake.exe 所在目錄(例如 D:\Program Files\Microsoft Visual Studio\VC98\Bin),將其加入 path 最前端。同目錄下的 CL.EXE(編譯器)、LINK.EXE(連結器)及 VCVARS32.BAT 稍後也會用到。
重新開啟命令提示字元,再次執行 echo %path% 確認路徑已生效,然後執行 nmake 應顯示:
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 Copyright (C) Microsoft Corp 1988-1998. All rights reserved. NMAKE : fatal error U1064: MAKEFILE not found and no target specified Stop.
這代表 nmake 已正常運作(找不到 Makefile 是預期行為)。
執行 cl 若報錯找不到 mspdb60.dll,請在系統中搜尋該檔案(通常在 D:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin),將其目錄也加入 path,以分號(;)分隔。同樣重啟命令列驗證 cl 與 link 指令是否正常顯示選項說明。
在任意目錄建立 hello.c:
#include <stdio.h>
int main() {
printf("abcdefg. ");
return 0;
}
進入該目錄,執行:
D:\>cd test
D:\test>cl hello.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
hello.c
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:hello.exe
hello.obj
D:\test>hello.exe
abcdefg.
編譯連結一氣呵成,產生 hello.exe 並正確輸出。是不是很簡單?
.cpp,cl 行為有何不同?cl 編譯成單一 .exe?void main() 或 void start() 可行嗎?stdio.h 這類標準庫頭檔是如何被系統整合的?.lib 中,Windows 如何將其連結進 .exe?這些疑問將在下一篇「hello.c 的疑惑」中逐一解答。