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