命令列 cl.exe 與 VC6 IDE 產出的 EXE 二進位內容預設不同,主因在於編譯選項與連結選項的預設值不一致。
| 項目 | VC6 IDE 預設 | cl 命令列預設 | 影響 |
|---|---|---|---|
| 運行期程式庫 | /MD (多執行緒 DLL) | /MT (多執行緒靜態) | EXE 體積、部署相依性 |
| 偵錯資訊 | Debug: /Zi /Od; Release: /O2 | 無 (需自行加入) | 除錯能力、效能 |
| 最佳化 | Release: 速度優先 (/O2) | 無最佳化 (/Od) | 執行速度、碼大小 |
| 堆疊大小 | 1 MB | 1 MB (同) | - |
| 子系統 | Console / Windows | Console (預設) | 進入點 main/WinMain |
cl 與 link 命令中。cl /MD /O2 /GX /W3 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"Release\\" /c main.c
link /OUT:"MyApp.exe" /INCREMENTAL:NO /SUBSYSTEM:CONSOLE /MACHINE:I386 Release\main.obj kernel32.lib user32.lib
compile.rsp,以 cl @compile.rsp 引用,避免命令列過長。fc /b vc6.exe cl.exe 或 dumpbin /headers 比對 PE 標頭、區段、時間戳記 (TimeDateStamp 會不同,屬正常)。/BREPRO (VS2015+ 支援) 並控制所有時間戳記來源。