用慣了linux下的GCC編譯工具,倒喜歡起命令列的方式編譯連結C程式,居然還發現我裝的VS工具沒看到直接編譯C程式的工具(我不太熟悉這個)。VS的編譯檔案命令是cl,連結命令是link。參考了網上資料,採用提取VS的編譯器檔案組成一個可以命令列方式編譯器的工具。以下為步驟:
1,在自己目錄建立檔案夾,如:D:/vctool;
2,將VS安裝目錄下的VC目錄下的bin、lib、include目錄考到vctool目錄下;
3,將c:/Program Files/Microsoft SDKs/Windows/V6.0A(或類似目錄,亦是VS的安裝檔案)下的Lib目錄拷到vctool目錄下,並記得不要覆蓋而是重新命名為sdklib;
4,現在所需的命令檔案和類庫、include檔案都拷過來了,將bin目錄加到環境變數path中;
5,接下來可以編寫c語言檔案 Test.c:
#include "stdio.h" __declspec(dllexport) int sum(int a, int b) { return a + b; }
5,編寫編譯檔案:build.bat:
set PATH=./;D:/vctool/bin;%path%set INCLUDE=D:/vctool/includeset LIB=D:/vctool/lib;D:/vctool/sdklib cl /c Test.clink /dll Test.objpause
6,雙擊運行build.bat,發現編譯錯誤,找不到mspdb80.dll檔案:
於是在VS安裝目錄下搜尋,將該檔案拷貝到vstool/bin目錄下;再雙擊build.bat編譯,編譯成功,目錄下已產生:
Test.dll Test.lib Test.obj
若連結的時候出現 LINK: fatal error LNK1104:無法開啟檔案“kernel32.lib” 錯誤,則是因為sdklib沒拷對或者沒設到環境變數LIB(build.bat)
以下為網上找到的相關資料:
2.下面詳細介紹下cl命令:
cl.exe 是控制 Microsoft C 和 C++ 編譯器與連結器的 32 位工具。編譯器產生通用物件檔案格式 (COFF)
對象 (.obj) 檔案。連結器產生可執行檔 (.exe) 或動態連結程式庫檔案 (DLL)。
注意,所有編譯器選項都區分大小寫。