微軟C/C++/C#編譯器命令列模式設定和用法

來源:互聯網
上載者:User

微軟C/C++/C#編譯器命令列模式設定和用法   

和在IDE中編譯相比,命令列模式編譯速度更快,並可以避免被IDE產生的一些附加資訊
所幹擾。本文將介紹微軟C/C++/C#編譯器命令列模式設定和用法。作業系統為Windows  
2000 。     

一.微軟C/C++編譯器命令列模式設定   

方法一   

1.參照如下內容(根據你的系統情況,作出相應修改),編寫一個批次檔,
假定命名為vs.bat。   

   @echo off   

   set PATH=C:/WINNT/SYSTEM32;D:/VS.NET/VC7/BIN;D:/VS.NET/COMMON7/IDE   

   set INCLUDE=D:/VS.NET/VC7/INCLUDE   

   set LIB=D:/VS.NET/VC7/LIB   

說明:   

a.以上各環境變數字串大小寫無所謂,但字元之間應避免出現空格。   

b.之所以加上C:/WINNT/SYSTEM32,目的是為了便於使用help之類的擴充命令,和
本討論主題並無直接關係。   

2.開啟一個“命令提示字元”視窗,執行如下命令:   

C:/>start c:/vc7.bat (根據你的檔案路徑,作出相應修改)   

即會建立一個新的“命令提示字元”視窗,在這個視窗內,便可進行C++程式編譯工作。具
體用法,後面再說。   

這種設定方法的缺點在於,只能在步驟2新建立的“命令提示字元”視窗裡進行編譯,一旦
關閉該視窗,即需要重新執行步驟2。   

方法二   

1.在案頭“我的電腦”表徵圖上,單擊右鍵,然後執行“屬性”功能表命令,或者,
依照“開始”-“設定”-“控制台”步驟,雙擊“系統”表徵圖,都會彈出“系統特
性”對話方塊。 選中“進階”頁面,點擊“環境變數”按鈕,即會出現圖1所示的環境變
量設定視窗。(說明:任何使用者都可以增/刪/改使用者環境變數,但只有管理員才能增/刪
/改系統內容變數。對於特定電腦的每個使用者來說,使用者環境變數可以不相同)     

圖1   

2.你可以設定為使用者環境變數,也可以設定為系統內容變數。參考以下內容,並
參見圖2所示介面。(根據你系統的情況,作出相應調整)  

   PATH=C:/WINNT/SYSTEM32;D:/VS.NET/VC7/BIN;D:/VS.NET/COMMON7/IDE   

   INCLUDE=D:/VS.NET/VC7/INCLUDE   

   LIB=D:/VS.NET/VC7/LIB     

圖2   

和方法一不同的是,採用這種方式,一旦設定完畢,便可一勞永逸。無需重新啟動計算
機,現在就開啟一個“命令提示字元”視窗,執行cl命令試試。     

說明:假如你的作業系統是Windows 95/98,可以參照上面描述,直接編輯autoexec.bat
檔案。   

二.Visual C# .NET編譯器命令列模式設定   

    C#編譯器命令列模式設定方法大同小異,具體不再贅述,只需在PATH後面加上C:/W
INNT/MICROSOFT.NET/FRAMEWORK/V1.0.3705即可。目前我的機器上PATH環境變數設定  
如下:   

    
PATH=C:/WINNT/SYSTEM32;D:/VS.NET/VC7/BIN;D:/VS.NET/COMMON7/IDE;C:/WINNT/MICRO
SOFT.NET/FRAMEWORK/V1.0.3705;D:/VS.NET/FRAMEWORKSDK/BIN;D:/BCC55/BIN;E:/ORACL
E/ORA81/BIN  

三.微軟C/C++編譯器命令列模式用法   

微軟C/C++編譯器編譯選項數目眾多,在“命令提示字元”視窗鍵入cl /?即可查看完整列
表(見附錄1)。比如說,/GX啟用C++異常處理機制,/GR啟用C++ RTTI,等等。在此不
打算詳細討論這些編譯選項用法。   

以下是我的測試目錄f:/vstest中的一個範例檔案:   

//1.cpp   

#include <iostream>  

using namespace std;   

void main()  

{   

  cout << "Hello Royal"<<endl;   

}   

你現在可以進入該目錄執行如下編譯命令:   

F:/vstest>cl /GX 1.cpp   

運行程式,即會產生如下輸出:   

Hello Royal  

編譯多個檔案也很簡單,參見下面例子:   

//2.cpp   

#include <iostream>  

#include "3.cpp"   

using namespace std;   

void main()  

{   

    CTest ct("Hello www.royaloo.com");   

    cout << ct.str << endl;   

}   

   

//3.cpp   

#include <string>   

using namespace std;   

class CTest  

{   

public:   

    CTest(string strValue): str(strValue){}   

    string str;   

};   

執行如下編譯命令即可:   

F:/vstest>cl /GX 2.cpp 3.cpp     

也可以這樣編譯,以指定產生的exe名字:  

F:/vstest>cl /GX /FeHello.exe 2.cpp 3.cpp (產生Hello.exe)  

運行程式,輸出結果如下:   

Hello www.royaloo.com   

四.Visual C# .NET編譯器命令列模式用法   

在“命令提示字元”視窗鍵入csc /?即可查看完整編譯選項列表(見附錄2)。在此不打算
詳細討論這些編譯選項用法。不過,要說明的是,你之所以無需使用/r:編譯選項引用相
關庫檔案,就可以編譯絕大多數程式,原因在於C#編譯器預設引用了mscorlib.dll以及
csc.rsp檔案中指定的程式庫。該檔案內容如下:  

# This file contains command-line options that the C#  
   # command line compiler (CSC) will process as part  
   # of every compilation, unless the "/noconfig" option  
   # is specified.  

   # Reference the common Framework libraries  
   /r:Accessibility.dll  
   /r:Microsoft.Vsa.dll  
   /r:System.Configuration.Install.dll  
   /r:System.Data.dll  
   /r:System.Design.dll  
   /r:System.DirectoryServices.dll  
   /r:System.dll  
   /r:System.Drawing.Design.dll  
   /r:System.Drawing.dll  
   /r:System.EnterpriseServices.dll  
   /r:System.Management.dll  
   /r:System.Messaging.dll  
   /r:System.Runtime.Remoting.dll  
   /r:System.Runtime.Serialization.Formatters.Soap.dll  
   /r:System.Security.dll  
   /r:System.ServiceProcess.dll  
   /r:System.Web.dll  
   /r:System.Web.RegularExpressions.dll  
   /r:System.Web.Services.dll  
   /r:System.Windows.Forms.Dll  
   /r:System.XML.dll      

可見,它引用了許多.NET標準庫,假如沒有充足的理由,就不要修改這個設定檔!  

但我修改了我機器上的csc.rsp檔案,它的尾部多了這兩行:  

#NUnit is a unit-testing framework for all .Net languages  
    /r:d:/Nunitv2.0/bin/nunit.framework.dll  

注意,檔案路徑中不可有空格。例如,Nunit2.0預設安裝主目錄為Nuint v2.0,假如不
做必要的更改(我改成了Nunitv2.0),將無法成功引用nunit.framework.dll,並將導
致整個csc命令列編譯器無法使用,小心!  

假如要取消對mscorlib.dll或csc.rsp引用的話,可以使用/nostdlib或/noconfig編譯選
項。   

以下是我的測試目錄f:/vstest中的一個範例檔案:   

//4.cs   

using System;   

namespace _4

{      

    class Class1   

    {           

         [STAThread]   

         static void Main(string[] args)   

        {   

             Console.WriteLine("Hello Royal");   

        }   

    }   

}   

執行如下編譯命令:   

F:/vstest>csc 4.cs   

運行程式,即輸出:   

Hello Royal  

以下是編譯多個檔案的例子:   

//5.cs   

using System;   

using _6;   

namespace _5

{   

   class Class5   

   {   

       [STAThread]  

    static void Main(string[] args)   

    {   

        Class6 c6 = new Class6("Hello www.royaloo.com");   

        Console.WriteLine(c6.str);   

    }   

   }   

}  

//6.cs   

using System;   

namespace _6

{      

   class Class6   

   {   

       public Class6(string strValue) {str = strValue;}   

       public string str;   

   }   

}   

執行如下編譯命令:   

F:/vstest>csc 5.cs 6.cs     

也可以這樣編譯,以指定產生的exe檔案名稱字:  

F:/vstest>csc /out:Hello.exe 5.cs 6.cs    

運行程式,即會輸出如下字樣:   

Hello www.royaloo.com    

附錄一(更詳細資料,可查閱MSDN)   

微軟C/C++ 編譯器選項   
  
-最佳化-   
  
/O1   
最小化空間  
  
/Op[-]   
改善浮點數一致性   
  
/O2   
最大化速度  
  
/Os   
優選代碼空間   
  
/Oa   
假設沒有別名   
  
/Ot   
優選代碼速度   
  
/Ob<n>   
內聯展開(預設 n=0)   
  
/Ow   
假設交叉函數別名   
  
/Od   
禁用最佳化(預設值)
  
/Ox   
最大化選項。(/Ogityb2 /Gs)   
  
/Og   
啟用全域最佳化   
  
/Oy[-]   
啟用架構指標省略   
  
/Oi   
啟用內建函式   
  
-代碼產生-   
  
/G3   
為 80386 進行最佳化   
  
/GH   
啟用 _pexit 函數調用   
  
/G4   
為 80486 進行最佳化   
  
/GR[-]   
啟用 C++ RTTI   
  
/G5   
為 Pentium 進行最佳化   
  
/GX[-]   
啟用 C++ EH(與 /EHsc 相同)   
  
/G6   
為 PPro、P-II、P-III 進行最佳化   
  
/EHs   
啟用 C++ EH(無 SEH 異常)   
  
/GB   
為混合模型進行最佳化(預設)   
  
/EHa   
啟用 C++ EH(w/ SEH 異常)   
  
/Gd   
__cdecl 呼叫慣例   
  
/EHc   
外部“C”預設為 nothrow   
  
/Gr   
__fastcall 呼叫慣例   
  
/GT   
產生纖維安全 TLS 訪問   
  
/Gz   
__stdcall 呼叫慣例  
  
/Gm[-]   
啟用最小重建   
  
/GA   
為 Windows 應用程式進行最佳化   
  
/GL[-]   
啟用連結時代碼產生  
  
/Gf   
啟用字串池   
  
/QIfdiv[-]   
啟用 Pentium FDIV 修複   
  
/GF   
啟用唯讀字串池    
  
/QI0f[-]   
啟用 Pentium 0x0f 修複   
  
/Gy   
分隔連結器函數   
  
/QIfist[-]   
使用 FIST 而不是 ftol()   
  
/GZ   
啟用堆棧檢查 (/RTCs)   
  
/RTC1   
啟用快速檢查 (/RTCsu)   
  
/Ge   
對所有函數強制堆棧檢查   
  
/RTCc   
轉換為較小的類型檢查   
  
/Gs[num]                
控制堆棧檢查調用   
  
/RTCs   
堆疊框架運行時檢查   
  
/GS   
啟用安全檢查   
  
/RTCu   
未初始化的本地用法檢查   
  
/Gh   
啟用 _penter 函數調用   
  
/clr[:noAssembly]   
為通用語言執行平台庫編譯noAssembly - 不產生程式集   
  
-輸出檔案-   
  
/Fa            
命名程式集列表檔案  
  
/Fo<file>   
命名物件檔案   
  
/FA[sc]                   
配置程式集列表   
  
/Fp<file>   
命名先行編譯標頭檔   
  
/Fd              
命名 .PDB 檔案    
  
/Fr   
命名源瀏覽器檔案   
  
/Fe<file>   
命名可執行檔   
  
/FR   
命名擴充 .SBR 檔案  
  
/Fm   
命名對應檔   
  
-前置處理器-   
  
/AI<dir>   
添加到程式集搜尋路徑   
  
/Fx   
將插入的代碼合并到檔案   
  
/FU<file>   
強制使用程式集/模組   
  
/FI<file>   
命名強制包含檔案   
  
/C   
不抽出注釋  
  
/U<name>   
移除預定義宏   
  
/D<name>{=|#}<text>  
定義宏   
  
/u   
移除所有預定義宏   
  
/E   
預先處理到 stdout   
  
/I<dir>   
添加到包含搜尋路徑  
  
/EP   
預先處理到 stdout,沒有 #line   
  
/X   
忽略“標準位置”   
  
/P   
預先處理到檔案   
  
-語言-   
  
/Zi   
啟用調試資訊   
  
/Zl   
忽略 .OBJ 中的預設庫名   
  
/ZI   
啟用“編輯並繼續”調試資訊    
  
/Zg   
產生函數原型   
  
/Z7   
啟用舊式調試資訊    
  
/Zs   
只進行語法檢查   
  
/Zd   
僅有行號調試資訊   
  
/vd{0|1}   
禁用/啟用 vtordisp  
  
/Zp[n]    
在 n 位元組邊界上封裝結構   
  
/vm<x>   
指向成員的指標類型  
  
/Za   
禁用擴充(暗指 /Op)   
  
/noBool   
禁用“bool”關鍵字  
  
/Ze   
啟用擴充(預設)   
  
/Zc:arg1[,arg2]   
C++ 語言一致性,這裡的參數可以是:forScope - 對範圍規則強制使用標準 C++;  
wchar_t - wchar_t 是本機類型,不是 typedef   
  
- 雜項 -   
  
@<file>   
選項回應檔   
  
/wo<n>   
發出一次警告 n   
  
/?, /help   
列印此協助訊息   
  
/w<l><n>   
為 n 設定警告層級 1-4   
  
/c   
只編譯,不連結    
  
/W<n>   
設定警告層級(預設 n=1)   
  
/H<num>   
最大外部名稱長度   
  
/Wall   
啟用所有警告   
  
/J   
預設 char 類型是 unsigned   
  
/Wp64   
啟用 64 位元連接埠定位警告   
  
/nologo   
取消顯示著作權訊息   
  
/WX   
將警告視為錯誤   
  
/showIncludes   
顯示包含檔案名稱   
  
/WL   
啟用單行診斷   
  
/Tc<source file>   
將檔案編譯為 .c   
  
/Yc   
建立 .PCH 檔案   
  
/Tp<source file>   
將檔案編譯為 .cpp   
  
/Yd   
將調試資訊放在每個 .OBJ 中   
  
/TC   
將所有檔案編譯為 .c   
  
/Yl[sym]   
為調試庫插入 .PCH 引用   
  
/TP   
將所有檔案編譯為 .cpp   
  
/Yu   
使用 .PCH 檔案   
  
/V<string>   
設定版本字串   
  
/YX   
自動 .PCH   
  
/w   
禁用所有警告   
  
/Y-   
禁用所有 PCH 選項   
  
/wd<n>   
禁用警告 n  
  
/Zm<n>   
最大記憶體配置(預設為 %)   
  
/we<n>   
將警告 n 視為錯誤   
  
-連結-   
  
/MD   
與 MSVCRT.LIB 連結  
  
/MDd   
與 MSVCRTD.LIB 調試庫連結   
  
/ML   
與 LIBC.LIB 連結   
  
/MLd   
與 LIBCD.LIB 調試庫連結   
  
/MT   
與 LIBCMT.LIB 連結  
  
/MTd   
與 LIBCMTD.LIB 調試庫連結   
  
/LD   
建立 .DLL   
  
/F<num>   
設定堆棧大小   
  
/LDd   
建立 .DLL 調試庫   
  
/link   
[連結器選項和庫]   
  

附錄二(更詳細資料,可查閱MSDN)   

Visual C# .NET 編譯器選項   
  
- 輸出檔案 -
  
/out:<檔案>  
輸出檔案名(預設值:包含主類的檔案或第一個檔案的基名稱)   
  
/target:exe  
產生控制台可執行檔(預設) (縮寫: /t:exe)   
  
/target:winexe   
產生 Windows 可執行檔 (縮寫: /t:winexe)   
  
/target:library   
產生庫 (縮寫: /t:library)   
  
/target:module   
產生能添加到其他程式集的模組 (縮寫: /t:module)   
  
/define:<符號列表>   
定義條件編譯符號 (縮寫: /d)   
  
/doc:<檔案>  
要產生的 XML 文檔檔案   
  
- 輸入檔案 -
  
/recurse:<萬用字元>   
根據萬用字元規範,包括目前的目錄和子目錄下的所有檔案   
  
/reference:<檔案清單>   
從指定的組件檔引用中繼資料 (縮寫: /r)   
  
/addmodule:<檔案清單>   
將指定的模組連結到此程式集中   
  
- 資源 -   
  
/win32res:<檔案>   
指定 Win32 資源檔 (.res)   
  
/win32icon:<檔案>   
使用該表徵圖輸出   
  
/resource:<資源資訊>   
嵌入指定的資源 (縮寫: /res)   
  
/linkresource:<資源資訊>   
 將指定的資源連結到此程式集中 (縮寫: /linkres)   
  
- 代碼產生 -   
  
/debug[+|-]   
發出調試資訊   
  
/debug:{full|pdbonly}   
指定偵錯類型(“full”是預設類型,可以將偵錯工具附加到正在啟動並執行程式)   
  
/optimize[+|-]   
啟用最佳化 (縮寫: /o)   
  
/incremental[+|-]   
啟用增量編譯 (縮寫: /incr)   
  
- 錯誤和警告 -   
  
/warnaserror[+|-]   
將警告視為錯誤   
  
/warn:<n>   
設定警告層級 (0-4) (縮寫: /w)   
  
/nowarn:<警告列表>   
禁用特定的警告訊息   
  
- 語言 -   
  
/checked[+|-]   
產生溢出檢查   
  
/unsafe[+|-]   
允許“不安全”代碼   
  
- 雜項 -   
  
@<檔案>   
讀取回應檔以獲得更多選項   
  
/help   
顯示此用法資訊 (縮寫: /?)   
  
/nologo   
取消編譯器著作權資訊   
  
/noconfig   
不要自動包含 CSC.RSP 檔案   
  
- 進階 -   
  
/baseaddress:<地址>   
要產生的庫的基址   
  
/bugreport:<檔案>   
建立一個“錯誤報表”檔案   
  
/codepage:<n>   
指定開啟源檔案時要使用的字碼頁   
  
/utf8output   
UTF-8 編碼的輸出編譯器訊息   
  
/main:<類型>   
指定包含進入點的類型(忽略所有其他可能的進入點) (縮寫: /m)   
  
/fullpaths   
編譯器產生完全限定路徑   
  
/filealign:<n>   
指定用於輸出檔案節的對齊   
  
/nostdlib[+|-]   
不引用標準庫 (mscorlib.dll)   
  
/lib:<檔案清單>   
指定要在其中搜尋引用的附加目錄    
  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.