VC编译连接选项详解
大家可能一直在用VC開發(fā)軟件,但是對于這個編譯器卻未必很了解。原因是多方面的。大多數(shù)情況下,我們只停留在“使用”它,而不會想去“了解”它。因為它只是一個工具,我們寧可把更多的精力放在C++語言和軟件設(shè)計上。我們習慣于這樣一種“模式”:建立一個項目,然后寫代碼,然后編譯,反反復(fù)復(fù)調(diào)試。但是,所謂:“公欲善其事,必先利其器”。如果我們精于VC開發(fā)環(huán)境,我們是不是能夠做得更加游刃有余呢?
VC的處理流程,大致分為兩步:編譯和連接。源文件通過編譯生成了.obj文件;所有.obj文件和.lib文件通過連接生成.exe文件或.dll文件。下面,我們分別討論這兩個步驟的一些細節(jié)。
編譯參數(shù)的設(shè)置。主要通過VC的菜單項Project->Settings->C/C++頁來完成。我們可以看到這一頁的最下面Project Options中的內(nèi)容,一般如下:
/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_M
BCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
各個參數(shù)代表的意義,可以參考Msdn。比如/nologo表示編譯時不在輸出窗口顯示這些設(shè)置(我們可以把這個參數(shù)去掉來看看效果)等等。一般我們不會直接修改這些設(shè)置,而是通過這一頁最上面的Category中的各項來完成。
1) General:一些總體設(shè)置。Warning level用來控制警告信息,其中Level 1是最嚴重的級別;Warnings as errors將警告信息當作錯誤處理;Optimizations是代碼優(yōu)化,可以在Category的Optimizations項中進行更細的設(shè)置;Generate browse info用以生成.sbr文件,記錄類、變量等符號信息,可以在Category的Listing Files項中進行更多的設(shè)置。Debug info,生成調(diào)試信息:None,不產(chǎn)生任何調(diào)試信息(編譯比較快);Line Numbers Only,僅生成全局的和外部符號的調(diào)試信息到.OBJ文件或.EXE文件,減小目標文件的尺寸;C 7.0- Compatible,記錄調(diào)試器用到的所有符號信息到.OBJ文件和.EXE文件;Program Database,創(chuàng)建.PDB文件記錄所有調(diào)試信息;Program Database for "Edit & Continue",創(chuàng)建.PDB文件記錄所有調(diào)試信息,并且支持調(diào)試時編輯。
2) C++ Language:pointer_to_member representation用來設(shè)置類定義/引用的先后關(guān)系,一般為Best-Case Always表示在引用類之前該類肯定已經(jīng)定義了;Enable Exception Handling,進行同步的異常處理;Enable Run-Time Type Information迫使編譯器增加代碼在運行時進行對象類型檢查;Disable Construction Displacements,設(shè)置類構(gòu)造/析構(gòu)函數(shù)調(diào)用虛函數(shù)問題。
3) Code Generation:Processor表示代碼指令優(yōu)化,可以為80386、80486、Pentium、Pentium Pro,或者Blend表示混合以上各種優(yōu)化。Use run-time library用以指定程序運行時使用的運行時庫(單線程或多線程,Debug版本或Release版本),有一個原則就是,一個進程不要同時使用幾個版本的運行時庫。Single-Threaded,靜態(tài)連接LIBC.LIB庫;Debug Single-Threaded,靜態(tài)連接LIBCD.LIB庫;Multithreaded,靜態(tài)連接LIBCMT.LIB庫;Debug Multithreaded,靜態(tài)連接LIBCMTD.LIB庫;Multithreaded DLL,動態(tài)連接MSVCRT.DLL庫;Debug Multithreaded DLL,動態(tài)連接MSVCRTD.DLL庫。連接了單線程庫就不支持多線程調(diào)用,連接了多線程庫就要求創(chuàng)建多線程的應(yīng)用程序。
Calling convention可以用來設(shè)定調(diào)用約定,有三種:__cdecl、__fastcall和__stdcall。各種調(diào)用約定的主要區(qū)別在于,函數(shù)調(diào)用時,函數(shù)的參數(shù)是從左到右壓入堆棧還是從右到左壓入堆棧;在函數(shù)返回時,由函數(shù)的調(diào)用者來清理壓入堆棧的參數(shù)還是由函數(shù)本身來清理;以及在編譯時對函數(shù)名進行的命名修飾(可以通過Listing Files看到各種命名修飾方式)。Struct member alignment用以指定數(shù)據(jù)結(jié)構(gòu)中的成員變量在內(nèi)存中是按幾字節(jié)對齊的,根據(jù)計算機數(shù)據(jù)總線的位數(shù),不同的對齊方式存取數(shù)據(jù)的速度不一樣。這個參數(shù)對數(shù)據(jù)包網(wǎng)絡(luò)傳輸?shù)葢?yīng)用尤為重要,不是存取速度問題,而是數(shù)據(jù)位的精確定義問題,一般在程序中使用#pragma pack來指定。
4) Customize:Disable Language Extensions,表示不使用微軟為標準C做的語言擴展;Eliminate Duplicate Strings,主要用于字符串優(yōu)化(將字符串放到緩充池里以節(jié)省空間),使用這個參數(shù),使得
| char *sBuffer = "This is a character buffer"; char *tBuffer = "This is a character buffer"; |
sBuffer和tBuffer指向的是同一塊內(nèi)存空間;Enable Function-Level Linking ,告訴編譯器將各個函數(shù)按打包格式編譯;Enables minimal rebuild,通過保存關(guān)聯(lián)信息到.IDB文件,使編譯器只對最新類定義改動過的源文件進行重編譯,提高編譯速度;Enable Incremental Compilation,同樣通過.IDB文件保存的信息,只重編譯最新改動過的函數(shù);Suppress Startup Banner and Information Messages,用以控制參數(shù)是否在output窗口輸出。
5) Listing Files:Generate browse info的功能上面已經(jīng)提到過。這里可以進行更多的設(shè)置。Exclude Local Variables from Browse Info表示是否將局部變量的信息放到.SBR文件中。Listing file type可以設(shè)置生成的列表信息文件的內(nèi)容: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目錄下,生成的文件名自動取源文件的文件名。
6) Optimizations:代碼優(yōu)化設(shè)置。可以選擇Maximize Speed生成最快速的代碼,或Minimize Size生成最小尺寸的程序,或者Customize定制優(yōu)化。定制的內(nèi)容包括:
Assume No Aliasing,不使用別名(提高速度);
Assume Aliasing Across Function Calls,僅函數(shù)內(nèi)部不使用別名;
Global Optimizations,全局優(yōu)化,比如經(jīng)常用到的變量使用寄存器保存,或者循環(huán)內(nèi)的計算優(yōu)化,如
| i = -100; while( i < 0 ){ i += x + y;} |
會被優(yōu)化為
| i = -100; |
Inline function expansion,內(nèi)聯(lián)函數(shù)擴展的三種優(yōu)化(使用內(nèi)聯(lián)可以節(jié)省函數(shù)調(diào)用的開銷,加快程序速度):Disable不使用內(nèi)聯(lián);Only __inline,僅函數(shù)定義前有inline或__inline標記使用內(nèi)聯(lián);Any Suitable,除了inline或__inline標記的函數(shù)外,編譯器“覺得”應(yīng)該使用內(nèi)聯(lián)的函數(shù),都使用內(nèi)聯(lián)。
7) Precompiled Headers:預(yù)編譯頭文件的設(shè)置。使用預(yù)編譯可以提高重復(fù)編譯的速度。VC一般將一些公共的、不大變動的頭文件(比如afxwin.h等)集中放到stdafx.h中,這一部分代碼就不必每次都重新編譯(除非是Rebuild All)。
8) Preprocessor:預(yù)編譯處理。可以定義/解除定義一些常量。Additional include directories,可以指定額外的包含目錄,一般是相對于本項目的目錄,如..\Include。
連接參數(shù)的設(shè)置。主要通過VC的菜單項Project->Settings->Link頁來完成。我們可以看到這一頁的最下面Project Options中的內(nèi)容,一般如下:
/nologo /subsystem:windows /incremental:yes /pdb:"Debug/WritingDlgTest.pdb" /debug /machi
ne:I386 /out:"Debug/WritingDlgTest.exe" /pdbtype:sept
下面我們分別來看一下Category中的各項設(shè)置。
1) General:一些總體設(shè)置。可以設(shè)置生成的文件路徑、文件名;連接的庫文件;Generate debug info,生成Debug信息到.PDB文件(具體格式可以在Category->Debug中設(shè)置);Ignore All Default Libraries,放棄所有默認的庫連接;Link Incrementally,通過生成. ILK文件實現(xiàn)遞增式連接以提高后續(xù)連接速度,但一般這種方式下生成的文件(EXE或DLL)較大;Generate Mapfile,生成.MAP文件記錄模塊相關(guān)信息;Enable Profiling,這個參數(shù)通常與Generate Mapfile參數(shù)同時使用,而且如果產(chǎn)生Debug信息的話,不能用.PDB文件,而且必須用Microsoft Format。
2) Customize:這里可以進行使用程序數(shù)據(jù)庫文件的設(shè)置。Force File Output ,強制產(chǎn)生輸出文件(EXE或DLL);Print Progress Messages,可以將連接過程中的進度信息輸出到Output窗口。
3) Debug:設(shè)置是否生成調(diào)試信息,以及調(diào)試信息的格式。格式可以有Microsoft Format、COFF Format(Common Object File Format)和Both Formats三種選擇;Separate Types,表示將Debug格式信息以獨立的.PDB文件存放,還是直接放在各個源文件的.PDB文件中。選中的話,表示采用后者的方式,這種方式調(diào)試啟動比較快。
4) Input:這里可以指定要連接的庫文件,放棄連接的庫文件。還可以增加額外的庫文件目錄,一般是相對于本項目的目錄,如..\Lib。Force Symbol References,可以指定連接特定符號定義的庫。
5) Output:Base Address可以改變程序默認的基地址(EXE文件默認為0x400000,DLL默認為x10000000),操作系統(tǒng)裝載一個程序時總是試著先從這個基地址開始。Entry-Point Symbol可以指定程序的入口地址,一般為一個函數(shù)名(且必須采用__stdcall調(diào)用約定)。一般Win32的程序,EXE的入口為WinMain,DLL的入口為DllEntryPoint;最好讓連接器自動設(shè)置程序的入口點。默認情況下,通過一個C的運行時庫函數(shù)來實現(xiàn):控制臺程序采用mainCRTStartup (或wmainCRTStartup)去調(diào)用程序的main (或wmain)函數(shù);Windows程序采用WinMainCRTStartup (或 wWinMainCRTStartup)調(diào)用程序的WinMain (或 wWinMain,必須采用__stdcall調(diào)用約定);DLL采用_DllMainCRTStartup調(diào)用DllMain函數(shù)(必須采用__stdcall調(diào)用約定)。Stack allocations,用以設(shè)置程序使用的堆棧大小(請使用十進制),默認為1兆字節(jié)。Version Information告訴連接器在EXE或DLL文件的開始部分放上版本號。
值得注意的是,上面各個參數(shù)是大小寫敏感的;在參數(shù)后加上“-”表示該參數(shù)無效;各個參數(shù)值選項
有“*”的表示為該參數(shù)的默認值;可以使用頁右上角的“Reset”按鈕來恢復(fù)該頁的所有默認設(shè)置。
其它一些參數(shù)設(shè)置
1) Project->Settings->General,可以設(shè)置連接MFC庫的方式(靜態(tài)或動態(tài))。如果是動態(tài)連
接,在你的軟件發(fā)布時不要忘了帶上MFC的DLL。
2) Project->Settings->Debug,可以設(shè)置調(diào)試時運行的可執(zhí)行文件,以及命令行參數(shù)等。
3) Project->Settings->Custom Build,可以設(shè)置編譯/連接成功后自動執(zhí)行一些操作。比較有
用的是,寫COM時希望VC對編譯通過的COM文件自動注冊,可以如下設(shè)置:
Description: Register COM
Commands: regsvr32 /s /c $(TargetPath)
echo regsvr32 exe.time > $(TargetDir)\$(TargetName).trg
Outputs: $(TargetDir)\$(TargetName).trg
4) Tools->Options->Directories,設(shè)置系統(tǒng)的Include、Library路徑。
一些小竅門
1) 有時候,你可能在編譯的時候,計算機突然非法關(guān)機了(可能某人不小心碰了電源或你的內(nèi)存不穩(wěn)定等原因)。當你重啟機器后打開剛才的項目,重新進行編譯,發(fā)現(xiàn)VC會崩掉。你或許以為你的VC編譯器壞了,其實不然(你試試編譯其它項目,還是好的!),你只要將項目的.ncb、.opt、.aps、.clw文件以及Debug、Release目錄下的所有文件都刪掉,然后重新編譯就行
了。
2) 如果你想與別人共享你的源代碼項目,但是把整個項目做拷貝又太大。你完全可以刪掉以下文件:.dsw、.ncb、.opt、.aps、.clw、. plg文件以及Debug、Release目錄下的所有文件。
3) 當你的Workspace中包含多個Project的時候,你可能不能直觀地、一眼看出來哪個是當前項目。可以如下設(shè)置:Tools->Options->Format,然后在Category中選擇Workspace window,改變其默認的字體(比如設(shè)成Fixedsys)就行了。
4) 如何給已有的Project改名字?將該Project關(guān)掉。然后以文本格式打開.dsp文件,替換原來的Project名字即可。
5) VC6對類成員的智能提示功能很有用,但有時候會失靈。你可以先關(guān)掉項目,將.clw和.ncb刪掉,然后重新打開項目,點擊菜單項View->ClassWizard,在彈出的對話框中按一下“Add All”按鈕;重新Rebuild All。應(yīng)該可以解決問題。
/******************編譯參數(shù)詳細的說明**********************************
-優(yōu)化-?
/O1 最小化空間 minimize space?
/Op[-] 改善浮點數(shù)一致性 improve floating-pt consistency?
/O2 最大化速度 maximize speed?
/Os 優(yōu)選代碼空間 favor code space?
/Oa 假設(shè)沒有別名 assume no aliasing?
/Ot 優(yōu)選代碼速度 favor code speed?
/Ob 內(nèi)聯(lián)展開(默認 n=0) inline expansion (default n=0)?
/Ow 假設(shè)交叉函數(shù)別名 assume cross-function aliasing?
/Od 禁用優(yōu)化(默認值) disable optimizations (default)?
/Ox 最大化選項。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)?
/Og 啟用全局優(yōu)化 enable global optimization?
/Oy[-] 啟用框架指針省略 enable frame pointer omission?
/Oi 啟用內(nèi)建函數(shù) enable intrinsic functions
-代碼生成-?
/G3 為 80386 進行優(yōu)化 optimize for 80386?
/G4 為 80486 進行優(yōu)化 optimize for 80486?
/GR[-] 啟用 C++ RTTI enable C++ RTTI?
/G5 為 Pentium 進行優(yōu)化 optimize for Pentium?
/G6 為 Pentium Pro 進行優(yōu)化 optimize for Pentium Pro?
/GX[-] 啟用 C++ 異常處理(與 /EHsc 相同) enable C++ EH (same as /EHsc)?
/EHs 啟用同步 C++ 異常處理 enable synchronous C++ EH?
/GD 為 Windows DLL 進行優(yōu)化 optimize for Windows DLL?
/GB 為混合模型進行優(yōu)化(默認) optimize for blended model (default)?
/EHa 啟用異步 C++ 異常處理 enable asynchronous C++ EH?
/Gd __cdecl 調(diào)用約定 __cdecl calling convention?
/EHc extern“C”默認為 nothrow extern "C" defaults to nothrow?
/Gr __fastcall 調(diào)用約定 __fastcall calling convention?
/Gi[-] 啟用增量編譯 enable incremental compilation?
/Gz __stdcall 調(diào)用約定 __stdcall calling convention?
/Gm[-] 啟用最小重新生成 enable minimal rebuild?
/GA 為 Windows 應(yīng)用程序進行優(yōu)化 optimize for Windows Application?
/Gf 啟用字符串池 enable string pooling?
/QIfdiv[-] 啟用 Pentium FDIV 修復(fù) enable Pentium FDIV fix?
/GF 啟用只讀字符串池 enable read-only string pooling?
/QI0f[-] 啟用 Pentium 0x0f 修復(fù) enable Pentium 0x0f fix?
/Gy 分隔鏈接器函數(shù) separate functions for linker?
/GZ 啟用運行時調(diào)試檢查 enable runtime debug checks?
/Gh 啟用鉤子函數(shù)調(diào)用 enable hook function call?
/Ge 對所有函數(shù)強制堆棧檢查 force stack checking for all funcs?
/Gs[num] 禁用堆棧檢查調(diào)用 disable stack checking calls
-輸出文件-?
/Fa[file] 命名程序集列表文件 name assembly listing file?
/Fo 命名對象文件 name object file?
/FA[sc] 配置程序集列表 configure assembly listing?
/Fp 命名預(yù)編譯頭文件 name precompiled header file?
/Fd[file] 命名 .PDB 文件 name .PDB file?
/Fr[file] 命名源瀏覽器文件 name source browser file?
/Fe 命名可執(zhí)行文件 name executable file?
/FR[file] 命名擴展 .SBR 文件 name extended .SBR file?
/Fm[file] 命名映射文件 name map file
-預(yù)處理器-?
/FI 命名強制包含文件 name forced include file?
/C 不吸取注釋 don't strip comments?
/U 移除預(yù)定義宏 remove predefined macro?
/D{=|#} 定義宏 define macro?
/u 移除所有預(yù)定義宏 remove all predefined macros?
/E 將預(yù)處理定向到標準輸出 preprocess to stdout?
/I 添加到包含文件的搜索路徑 add to include search path?
/EP 將預(yù)處理定向到標準輸出,不要帶行號 preprocess to stdout, no #line?
/X 忽略“標準位置” ignore "standard places"?
/P 預(yù)處理到文件 preprocess to file
-語言-?
/Zi 啟用調(diào)試信息 enable debugging information?
/Zl 忽略 .OBJ 中的默認庫名 omit default library name in .OBJ?
/ZI 啟用調(diào)試信息的“編輯并繼續(xù)”功能 enable Edit and Continue debug info?
/Zg 生成函數(shù)原型 generate function prototypes?
/Z7 啟用舊式調(diào)試信息 enable old-style debug info?
/Zs 只進行語法檢查 syntax check only?
/Zd 僅要行號調(diào)試信息 line number debugging info only?
/vd{0|1} 禁用/啟用 vtordisp disable/enable vtordisp?
/Zp[n] 在 n 字節(jié)邊界上包裝結(jié)構(gòu) pack structs on n-byte boundary?
/vm 指向成員的指針類型 type of pointers to members?
/Za 禁用擴展(暗指 /Op) disable extensions (implies /Op)?
/noBool 禁用“bool”關(guān)鍵字 disable "bool" keyword?
/Ze 啟用擴展(默認) enable extensions (default)
- 雜項 -?
/?, /help 打印此幫助消息 print this help message?
/c 只編譯,不鏈接 compile only, no link?
/W 設(shè)置警告等級(默認 n=1) set warning level (default n=1)?
/H 最大化外部名稱長度 max external name length?
/J 默認 char 類型是 unsigned default char type is unsigned?
/nologo 取消顯示版權(quán)消息 suppress copyright message?
/WX 將警告視為錯誤 treat warnings as errors?
/Tc 將文件編譯為 .c compile file as .c?
/Yc[file] 創(chuàng)建 .PCH 文件 create .PCH file?
/Tp 將文件編譯為 .cpp compile file as .cpp?
/Yd 將調(diào)試信息放在每個 .OBJ 中 put debug info in every .OBJ?
/TC 將所有文件編譯為 .c compile all files as .c?
/TP 將所有文件編譯為 .cpp compile all files as .cpp?
/Yu[file] 使用 .PCH 文件 use .PCH file?
/V 設(shè)置版本字符串 set version string?
/YX[file] 自動的 .PCH 文件 automatic .PCH?
/w 禁用所有警告 disable all warnings?
/Zm 最大內(nèi)存分配(默認為 %) max memory alloc (% of default)
-鏈接-?
/MD 與 MSVCRT.LIB 鏈接 link with MSVCRT.LIB?
/MDd 與 MSVCRTD.LIB 調(diào)試庫鏈接 link with MSVCRTD.LIB debug lib?
/ML 與 LIBC.LIB 鏈接 link with LIBC.LIB?
/MLd 與 LIBCD.LIB 調(diào)試庫鏈接 link with LIBCD.LIB debug lib?
/MT 與 LIBCMT.LIB 鏈接 link with LIBCMT.LIB?
/MTd 與 LIBCMTD.LIB 調(diào)試庫鏈接 link with LIBCMTD.LIB debug lib?
/LD 創(chuàng)建 .DLL Create .DLL?
/F 設(shè)置堆棧大小 set stack size?
/LDd 創(chuàng)建 .DLL 調(diào)試庫 Create .DLL debug libary?
/link [鏈接器選項和庫] [linker options and libraries]
VC編譯選項
/Od? 禁用優(yōu)化(默認值)? disable optimizations (default)
/Ox? 最大化選項。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)
/Og? 啟用全局優(yōu)化? enable global optimization?
/Oy[-]? 啟用框架指針省略? enable frame pointer omission
/Oi? 啟用內(nèi)建函數(shù)? enable intrinsic functions
-代碼生成-?
/G3? 為 80386 進行優(yōu)化? optimize for 80386
/G4? 為 80486 進行優(yōu)化? optimize for 80486
/GR[-]? 啟用 C++ RTTI? enable C++ RTTI
/G5? 為 Pentium 進行優(yōu)化? optimize for Pentium
/G6 為 Pentium Pro 進行優(yōu)化? optimize for Pentium Pro
/GX[-]? 啟用 C++ 異常處理(與 /EHsc 相同)? enable C++ EH (same as /EHsc)
/EHs? 啟用同步 C++ 異常處理? enable synchronous C++ EH
/GD 為 Windows DLL 進行優(yōu)化 optimize for Windows DLL
/GB? 為混合模型進行優(yōu)化(默認)? optimize for blended model (default)
/EHa? 啟用異步 C++ 異常處理? enable asynchronous C++ EH
/Gd? __cdecl 調(diào)用約定? __cdecl calling convention?
/EHc? extern“C”默認為 nothrow? extern "C" defaults to nothrow
/Gr? __fastcall 調(diào)用約定? __fastcall calling convention
/Gi[-] 啟用增量編譯 enable incremental compilation
/Gz? __stdcall 調(diào)用約定? __stdcall calling convention?
/Gm[-]? 啟用最小重新生成? enable minimal rebuild
/GA? 為 Windows 應(yīng)用程序進行優(yōu)化 optimize for Windows Application
/Gf? 啟用字符串池? enable string pooling?
/QIfdiv[-]? 啟用 Pentium FDIV 修復(fù)? enable Pentium FDIV fix?
/GF? 啟用只讀字符串池? enable read-only string pooling?
/QI0f[-]? 啟用 Pentium 0x0f 修復(fù)? enable Pentium 0x0f fix
/Gy? 分隔鏈接器函數(shù)? separate functions for linker
/GZ? 啟用運行時調(diào)試檢查 enable runtime debug checks
/Gh 啟用鉤子函數(shù)調(diào)用 enable hook function call
/Ge? 對所有函數(shù)強制堆棧檢查? force stack checking for all funcs
/Gs[num]? 禁用堆棧檢查調(diào)用? disable stack checking calls
-輸出文件-?
/Fa[file]? 命名程序集列表文件? name assembly listing file
/Fo? 命名對象文件? name object file
/FA[sc]? 配置程序集列表? configure assembly listing?
/Fp? 命名預(yù)編譯頭文件? name precompiled header file
/Fd[file]? 命名 .PDB 文件? name .PDB file?
/Fr[file]? 命名源瀏覽器文件? name source browser file
/Fe? 命名可執(zhí)行文件? name executable file
/FR[file]? 命名擴展 .SBR 文件? name extended .SBR file
/Fm[file]? 命名映射文件? name map file
-預(yù)處理器- ?
/FI? 命名強制包含文件? name forced include file
/C? 不吸取注釋? don't strip comments?
/U? 移除預(yù)定義宏? remove predefined macro
/D{=|#}? 定義宏? define macro
/u? 移除所有預(yù)定義宏? remove all predefined macros
/E? 將預(yù)處理定向到標準輸出 preprocess to stdout
/I 添加到包含文件的搜索路徑? add to include search path
/EP? 將預(yù)處理定向到標準輸出,不要帶行號? preprocess to stdout, no #line
/X? 忽略“標準位置”? ignore "standard places"
/P? 預(yù)處理到文件? preprocess to file
-語言-?
/Zi? 啟用調(diào)試信息? enable debugging information
/Zl? 忽略 .OBJ 中的默認庫名? omit default library name in .OBJ
/ZI? 啟用調(diào)試信息的“編輯并繼續(xù)”功能 enable Edit and Continue debug info
/Zg? 生成函數(shù)原型? generate function prototypes
/Z7? 啟用舊式調(diào)試信息? enable old-style debug info
/Zs? 只進行語法檢查? syntax check only
/Zd? 僅要行號調(diào)試信息? line number debugging info only
/vd{0|1}? 禁用/啟用 vtordisp? disable/enable vtordisp
/Zp[n]? 在 n 字節(jié)邊界上包裝結(jié)構(gòu)? pack structs on n-byte boundary
/vm? 指向成員的指針類型? type of pointers to members
/Za? 禁用擴展(暗指 /Op)? disable extensions (implies /Op)
/noBool? 禁用“bool”關(guān)鍵字? disable "bool" keyword
/Ze? 啟用擴展(默認)? enable extensions (default)
- 雜項 -?
/?, /help? 打印此幫助消息? print this help message
/c? 只編譯,不鏈接? compile only, no link
/W? 設(shè)置警告等級(默認 n=1)? set warning level (default n=1)
/H? 最大化外部名稱長度? max external name length
/J? 默認 char 類型是 unsigned? default char type is unsigned
/nologo? 取消顯示版權(quán)消息? suppress copyright message
/WX? 將警告視為錯誤? treat warnings as errors
/Tc? 將文件編譯為 .c? compile file as .c?
/Yc[file]? 創(chuàng)建 .PCH 文件? create .PCH file
/Tp? 將文件編譯為 .cpp? compile file as .cpp?
/Yd? 將調(diào)試信息放在每個 .OBJ 中? put debug info in every .OBJ
/TC? 將所有文件編譯為 .c? compile all files as .c?
/TP? 將所有文件編譯為 .cpp? compile all files as .cpp?
/Yu[file]? 使用 .PCH 文件? use .PCH file
/V? 設(shè)置版本字符串? set version string
/YX[file]? 自動的 .PCH 文件 automatic .PCH
/w? 禁用所有警告? disable all warnings
/Zm? 最大內(nèi)存分配(默認為 %)? max memory alloc (% of default)
-鏈接-?
/MD? 與 MSVCRT.LIB 鏈接? link with MSVCRT.LIB
/MDd? 與 MSVCRTD.LIB 調(diào)試庫鏈接? link with MSVCRTD.LIB debug lib
/ML? 與 LIBC.LIB 鏈接? link with LIBC.LIB
/MLd? 與 LIBCD.LIB 調(diào)試庫鏈接? link with LIBCD.LIB debug lib
/MT? 與 LIBCMT.LIB 鏈接 ?link with LIBCMT.LIB?
/MTd? 與 LIBCMTD.LIB 調(diào)試庫鏈接? link with LIBCMTD.LIB debug lib
/LD? 創(chuàng)建 .DLL? Create .DLL?
/F? 設(shè)置堆棧大小? set stack size
/LDd? 創(chuàng)建 .DLL 調(diào)試庫? Create .DLL debug libary
/link? [鏈接器選項和庫]? [linker options and libraries]
https://www.cnblogs.com/zhehan54/p/7193176.html
總結(jié)
以上是生活随笔為你收集整理的VC编译连接选项详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c/c++处理参数
- 下一篇: Python 爬虫进阶一之爬虫框架概述