1. 程式人生 > >vs2010編譯引數設定

vs2010編譯引數設定

Visual C++2010 編譯引數的設定。主要通過IDE的選單項Project->Settings->C/C++頁來完成。我們可以看到這一頁的最下面Project Options中的內容,一般如下:

/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WIN
DOWS" /D "_AFXDLL" /D"_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"st
dafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

各個引數代表的意義,可以參考Msdn.比如/nologo表示編譯時不在輸出視窗顯示這些設定(我們可以把這個引數去掉來看看效果)等等。一般我們不會直接修改這些設定,而是通過這一頁最上面的Category中的各項來完成。

1.General:

Warning level
 用來控制警告資訊,其中Level 1是最嚴重的級別;
 
Warnings as errors
 將警告資訊當作錯誤處理;
 
Optimizations
 是程式碼優化,

可以在Category的Optimizations項中進行更細的設定;
 
Generate browse info
 用以生成.sbr檔案,記錄類、變數等符號資訊,

可以在Category的Listing Files項中進行更多的設定。
 
Debug info
 生成除錯資訊;
 
None
 不產生任何除錯資訊(編譯比較快)
 
Line Numbers Only
 僅生成全域性的和外部符號的除錯資訊到.OBJ檔案或.EXE檔案,減小目標檔案的尺寸
 
C 7.0- Compatible
 記錄偵錯程式用到的所有符號資訊到.OBJ檔案和.EXE檔案
 
Program Database
 建立.PDB檔案記錄所有除錯資訊
 
Program Database for "Edit & Continue"
 建立.PDB檔案記錄所有除錯資訊,並且支援除錯時編輯
 


2.C++ Language:

pointer_to_member representation
 用來設定類定義/引用的先後關係,一般為Best-Case Always表示在引用類之前該類肯定已經定義了
 
Enable Exception Handling
 進行同步的異常處理
 
Enable Run-Time Type Information
 迫使編譯器增加程式碼在執行時進行物件型別檢查
 
Disable Construction Displacements
 設定類構造/解構函式呼叫虛擬函式問題
 


3.Code Generation:

Processor
 表示程式碼指令優化,可以為80386、80486、Pentium、Pentium Pro,或者Blend表示混合以上各種優化。
 
Use run-time library
 用以指定程式執行時使用的執行時庫(單執行緒或多執行緒,Debug版本或Release版本),有一個原則就是,一個程序不要同時使用幾個版本的執行時庫。

 
 
Single-Threaded
 靜態連線LIBC.LIB庫
 
Debug Single-Threaded
 靜態連線LIBCD.LIB庫
 
Multithreaded
 靜態連線LIBCMT.LIB庫
 
Debug Multithreaded
 靜態連線LIBCMTD.LIB庫
 
Multithreaded DLL
 動態連線MSVCRT.DLL庫
 
Debug Multithreaded DLL
 動態連線MSVCRTD.DLL庫。連線了單執行緒庫就不支援多執行緒呼叫,連線了多執行緒庫就要求建立多執行緒的應用程式。

 
 
Calling convention
 可以用來設定呼叫約定,有三種:__cdecl、__fastcall和__stdcall。各種呼叫約定的主要區別在於,函式呼叫時,函式的引數是從左到右壓入堆疊還是從右到左壓入堆疊;在函式返回時,由函式的呼叫者來清理壓入堆疊的引數還是由函式本身來清理;以及在編譯時對函式名進行的命名修飾(可以通過Listing Files看到各種命名修飾方式)。

 
 
Struct member alignment
 用以指定資料結構中的成員變數在記憶體中是按幾字節對齊的,根據計算機資料匯流排的位數,不同的對齊方式存取資料的速度不一樣。這個引數對資料包網路傳輸等應用尤為重要,不是存取速度問題,而是資料位的精確定義問題,一般在程式中使用#pragma pack來指定。
 


4.Customize:

Disable Language Extensions
 表示不使用微軟為標準C做的語言擴充套件
 
Eliminate Duplicate Strings
 主要用於字串優化(將字串放到緩充池裡以節省空間),使用這個引數,使得

char *sBuffer = "This is a character buffer";

char *tBuffer = "This is a character buffer";

sBuffer和tBuffer指向的是同一塊記憶體空間;
 
Enable Function-Level Linking
 告訴編譯器將各個函式按打包格式編譯
 
Enables minimal rebuild
 通過儲存關聯資訊到.IDB檔案,使編譯器只對最新類定義改動過的原始檔進行重編譯,提高編譯速度
 
Enable Incremental Compilation
 同樣通過.IDB檔案儲存的資訊,只重編譯最新改動過的函式
 
Suppress Startup Banner and Information Messages
 用以控制引數是否在output視窗輸出


5.Listing Files:

Generate browse info
 的功能上面已經提到過。這裡可以進行更多的設定。
 
Exclude Local Variables from Browse Info
 表示是否將區域性變數的資訊放到.SBR檔案中。
 
Listing file type
 可以設定生成的列表資訊檔案的內容:Assembly-Only Listing僅生成彙編程式碼檔案(.ASM副檔名)
 
Assembly With Machine Code
 生成機器程式碼和彙編程式碼檔案(.COD副檔名)

 
 
Assembly With Source Code
 生成原始碼和彙編程式碼檔案(.ASM副檔名)
 
Assembly, Machine Code,and Source
 生成機器碼、原始碼和彙編程式碼檔案(.COD副檔名)
 
Listing file name
 為生成的資訊檔案的路徑,一般為Debug或Release目錄下,生成的檔名自動取原始檔的檔名。