cl.exe 批處理編譯dll從入門到sln
CL。exe 的命令列編譯斷斷續續接觸了幾次,每次都忘,每次都重新查。每次都搞不清楚語法,尤其是傳給linker的引數。因為網上所有的文章都是一樣的,都是詳細的引數列表,都是沒有例項。為了和大眾保持一致,我在下面也copy一個詳細的引數列表——-只是在前面加幾個例項
cl。exe test。cpp /EHsc /I“C:/OpenCV2。0/include/opencv/” cv200。lib highgui200。lib cxcore200。lib /link /LIBPATH:“C:/OpenCV2。0/vs2008/lib”
/LIBPATH小寫也可以/libpath
網上找到的“經典用法”
cl *。cpp /G7 /MD /Ox /Ot /W3 /c /EHsc /I“G:/Visual C++/VC98/PlatformSDK/Include”
link *。obj rc。res /LIBPATH:“G:/Visual C++/lib” /SUBSYSTEM:WINDOWS /MACHINE:X86 kernel32。lib user32。lib gdi32。lib winspool。lib comdlg32。lib advapi32。lib shell32。lib ole32。lib oleaut32。lib uuid。lib odbc32。lib odbccp32。lib OpenGL32。Lib
MFC 開發如下:
編譯原始碼:
cl *。cpp /Ox /Ot /G7 /D “WIN32” /D “_WINDOWS” /D “_AFXDLL” /EHsc /MD /arch:SSE2 /W3 /c
資源編譯 :
rc /l 0x804 winmfc。rc
連結 :
link *。obj WinMFC。res /out:WinMFC。exe /OPT:NOWIN98 /SUBSYSTEM:WINDOWS /MACHINE:X86
===================================
CL 命令列使用下列語法:
CL [option。。。] file。。。 [option | file]。。。 [lib。。。] [@command-file] [/link link-opt。。。]
下表說明CL 命令的輸入項意義
option 一個或多個 CL 選項。請注意,所有選項都應用於所有指定的原始檔。選項是由一個正斜槓 (/) 或一個短劃線 (–) 指定的。如果某個選項帶有引數,則該選項的說明指定在選項和引數之間是否允許有空格。選項名(/HELP 選項除外)區分大小寫。有關更多資訊,請參閱 CL 選項的順序。
file 一個或多個原始檔、。obj 檔案或庫的名稱。CL 編譯原始檔並將 。obj 檔案和庫的名稱傳遞給連結器。有關更多資訊,請參閱 CL 檔名語法。
lib 一個或多個庫名。CL 將這些名稱傳遞給連結器。
command-file 包含多個選項和檔名的檔案。有關更多資訊,請參閱 CL 命令檔案。
link-opt 一個或多個連結器選項。CL 將這些選項傳遞給連結器。
您可以指定任意數目的選項、檔名和庫名,條件是命令列上的字元數不超過 1024,該限制是作業系統指定的。
編譯器
注意,所有編譯器選項都區分大小寫。
若要編譯但不連結,請使用 /c。
使用 NMAKE 生成輸出檔案。
使用 BSCMAKE 支援類瀏覽。
以下是一個完整的編譯器選項分類列表。
一、最佳化
選項 作用
/O1 建立小程式碼
/O2 建立快速程式碼
/Oa 假設沒有別名
/Ob 控制內聯展開
/Od 禁用最佳化
/Og 使用全域性最佳化
/Oi 生成內部函式
/Op 改善浮點數一致性
/Os 程式碼大小優先
/Ot 程式碼速度優先
/Ow 假定在函式呼叫中使用別名
/Ox 使用最大最佳化 (/Ob1gity /Gs)
/Oy 省略框架指標
二、程式碼生成
選項 作用
/clr 啟用C++ 的託管擴充套件併產生在公共語言執行庫上執行的輸出檔案
/EH 指定異常處理模型
/G3 最佳化程式碼以優選386處理器。在Visual C++ 5。0中已經停用,編譯器將忽略此選項
/G4 最佳化程式碼以優選486處理器。在Visual C++ 5。0中已經停用,編譯器將忽略此選項
/G5 最佳化程式碼以優選Pentium
/GB 與/G6等效;將 _M_IX86的值設定為600
/Gd 使用__cdecl 呼叫約定
/Ge 啟用堆疊探測
/GF
/GF 啟用字串池
/GH 呼叫掛鉤函式_penter
/GH 呼叫掛鉤函式_pexit
/GL 啟用全程式最佳化
/Gm 啟用最小重新生成
/Gr 啟用執行時型別資訊(RTTI)
/Gr 使用 __fastcall 呼叫約定
/GS 控制堆疊探測
/GT 支援使用靜態執行緒本地儲存區分配的資料的纖程安全
/GX 啟用同步異常處理
/Gy 啟用函式級連結
/GZ 使用 __stdcall 呼叫約定
/MD 使用 MSVCRT。lib 建立多執行緒 DLL
/MDd 使用 MSVCRTD。lib 建立除錯多執行緒 DLL
/ML 使用 LIBC。lib 建立單執行緒可執行檔案
/MLd 使用 LIBCD。lib 建立除錯單執行緒可執行檔案
/MT 使用 LIBCMT。lib 建立多執行緒可執行檔案
/MTd 使用 LIBCMTD。lib 建立除錯多執行緒可執行檔案
三、輸出檔案
選項 作用
/FA 建立列表檔案
/FA 設定列表檔名
/Fd 重新命名程式資料庫檔案
/Fe 重新命名可執行檔案
/Fm 建立對映檔案
/Fo 建立物件檔案
/Fp 指定預編譯標頭檔案名
/FR
/FR 生成瀏覽器檔案
/Fx 將插入的程式碼與原始檔合併
四、除錯
選項 作用
/GS 緩衝區安全檢查
/GZ 與 /RTC1 相同
/RTC 啟用執行時錯誤檢查
/Wp64 檢測 64 位可移植性問題
/Yd 將完整的除錯資訊放在所有物件檔案中
/Yl 建立除錯庫時插入 PCH 引用
/Z7 生成與 C 7。0 相容的除錯資訊
/Zd 生成行號
/Zi 生成完整的除錯資訊
五、預處理器
選項 作用
/AI 指定在解析傳遞到#using 指令的檔案引用時搜尋的目錄
/c 在預處理期間保留註釋
/D 定義常數和宏
/E 將預處理器輸出複製到標準輸出
/EP 將預處理器輸出複製到標準輸出
/Fl 預處理指定的包含檔案
/FU 強制使用檔名,就像它已被傳遞到#using 指令一樣
/I 在目錄中搜索包含檔案
/P 將預處理器輸出寫入檔案
/U 移除預定義宏
/U 移除所有的預定義宏
/X 忽略標準包含目錄
/ZI 將除錯資訊包含在與“編輯並繼續”相容的程式資料庫中
六、語言
選項 作用
/noBool 取消 C++ bool、true 和 false 關鍵字
/vd 取消或啟用隱藏的 vtordisp 類成員
/vmb 對指向成員的指標使用最佳的基
/vmg 對指向成員的指標使用完全一般性
/vmm 宣告多重繼承
/vms 宣告單一繼承
/vmv 宣告虛擬繼承
/Za 禁用語言擴充套件
/Zc 在 /Ze 下指定標準行為
/Ze 啟用語言擴充套件
/Zg 生成函式原型
/Zl 從 。obj 檔案中移除預設庫名
/Zpn 封裝結構成員
/Zs 只檢查語法
七、連結
選項 作用
/F 設定堆疊大小
/LD 建立動態連結庫
/LDd 建立除錯動態連結庫
/link 將指定的選項傳遞給 LINK
/MD 使用 MSVCRT。lib 編譯以建立多執行緒 DLL
/MDd 使用 MSVCRTD。lib 編譯以建立除錯多執行緒 DLL
/ML 使用 LIBC。lib 編譯以建立單執行緒可執行檔案
/MLd 使用 LIBCD。lib 編譯以建立除錯單執行緒可執行檔案
/MT 使用 LIBCMT。lib 編譯以建立多執行緒可執行檔案
/MTd 使用 LIBCMTD。lib 編譯以建立除錯多執行緒可執行檔案
八、預編譯頭
選項 作用
/Y- 忽略當前生成中的所有其他預編譯頭編譯器選項
/Yc 建立預編譯標頭檔案
/Yd 將完整的除錯資訊放在所有物件檔案中
/Yu 在生成期間使用預編譯標頭檔案
/YX 自動處理預編譯頭
九、雜項
選項 作用
@ 指定響應檔案
/? 列出編譯器選項
/c 編譯但不連結
/H 限制外部(公共)名稱的長度
/HELP 列出編譯器選項
/J 更改預設的 char 型別
/NOLOGO 取消顯示登入版權標誌
/QI0f 確保 Pentium 0F 指令沒有問題
/QIfdiv FDIV、FPREM、FPTAN 和 FPATAN 指令有缺陷的 Intel Pentium 微處理器的變通方法
/QIfist 當需要從浮點型別轉換為整型時取消 Helper 函式 _ftol 的呼叫
/showIncludes 在編譯期間顯示所有包含檔案的列表
/Tc
/Tc 指定 C 原始檔
/Tp
/Tp 指定 C++ 原始檔
/V 設定版本字串
/w 設定警告等級
/w 禁用所有警告
/Wall 啟用所有警告,包括預設情況下禁用的警告
/WL 在從命令列編譯 C++ 原始碼時啟用錯誤資訊和警告訊息的單行診斷
/Zm 設定編譯器的記憶體分配限制
===================================
LINK 用法如下:
/ALIGN 指定每一節的對齊方式
/ALIGN 選項指定程式線性地址空間中每一節的對齊方式。number 引數以位元組為單位,並且必須是2 的冪。預設值是 4K (4096)。如果對齊方式產生
無效的影象,則連結器發出警告。除非正
在編寫諸如裝置驅動程式的應用程式,否則應不需要修改對齊方式。
/DLL 生成 DLL
/DRIVER 建立 Windows NT 核心模式驅動程式
/EXETYPE 生成虛擬裝置驅動程式
/EXETYPE:DYNAMIC 建立動態載入的虛擬裝置驅動程式。
/EXETYPE:DEV386 建立靜態載入的虛擬裝置驅動程式。這是 /EXETYPE 的預設值
/INCREMENTAL 控制增量連結
/LARGEADDRESSAWARE 通知編譯器應用程式支援大於 2 GB 的地址
/LIBPATH 允許使用者重寫環境庫路徑
/LIBPATH:“e:/VC/LIB” /LIBPATH:“e:/DX/LIB”
/MACHINE 指定目標平臺
` /MACHINE:{AM33|ARM|EBC|IA64|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|
MIPSR41XX|SH3|SH3DSP|SH4|SH5|THUMB|X86| X64/*8。0版本*/}
/MACHINE:X86
/NOENTRY 建立純資源 DLL
建立純資源 DLL 時要求 /NOENTRY 選項。
/OPT 控制 LINK 最佳化
如果生成僅運行於 Windows NT 或 Windows 2000 上的元件,則應使用 /OPT:NOWIN98。
/SUBSYSTEM: 指定子系統
{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|
WINDOWSCE}[,#[。##]]
/OUT 指定輸出檔名
/OUT:Hello。exe