習慣了 Linux 下 GCC 編譯工具,反而喜歡上命令列方式編譯連結 C 程式。發現裝的 VS 工具沒看到直接編譯 C 程式的工具(不太熟悉)。VS 的編譯命令是 cl,連結命令是 link。參考網上資料,提取 VS 的編譯器檔案組成一個可命令列編譯的工具。步驟如下:
D:/vctoolVC 目錄下的 bin、lib、include 目錄複製到 vctool 目錄下C:/Program Files/Microsoft SDKs/Windows/V6.0A 或類似目錄(VS 安裝檔案)下的 Lib 目錄複製到 vctool 目錄下,重命名為 sdklib(不要覆蓋)bin 目錄加到環境變數 path 中Test.c:
#include "stdio.h"
__declspec(dllexport) int sum(int a, int b)
{
return a + b;
}
build.bat:
set PATH=./;D:/vctool/bin;%path% set INCLUDE=D:/vctool/include set LIB=D:/vctool/lib;D:/vctool/sdklib cl /c Test.c link /dll Test.obj pause
build.bat,若出現找不到 mspdb80.dll 錯誤,在 VS 安裝目錄搜尋並複製到 vstool/bin 目錄下;再次執行編譯成功,目錄下生成 Test.dll、Test.lib、Test.obj若連結時出現 LINK: fatal error LNK1104:無法打開檔案 "kernel32.lib",則是因為 sdklib 沒複製正確或沒設到環境變數 LIB(build.bat)。
/c:編譯但不連結/Zs:檢查語法/Fe:重命名可執行檔/I:指定包含檔目錄/LD:建立動態連結庫/MD:使用 MSVCRT.lib 建立多執行緒 DLL/O2:建立快速代碼/W3:設定警告等級/DLL:生成 DLL/LIBPATH:允許使用者重寫環境庫路徑/MACHINE:X86:指定目標平台/SUBSYSTEM:WINDOWS:指定子系統/OUT:指定輸出檔名此外 rc 是資源編譯工具。MFC 開發流程:編譯源碼 → 資源編譯 → 連結。