逐步解說:在命令列上編譯原生 C++ 程式

Visual Studio 包含命令列 C 和 C++ 編譯器。 您可以使用它來建立從基本主控台應用程式到通用 Windows 平臺應用程式、傳統型應用程式、設備磁碟機和 .NET 元件的所有專案。

在本逐步解說中,您會使用文字編輯器來建立基本的 「Hello, World」 樣式 C++ 程式,然後在命令列上加以編譯。 如果您想要嘗試 Visual Studio IDE 而不是使用命令列,請參閱 逐步解說:使用專案和方案 (C++) 或使用 Visual Studio IDE for C++ 桌面開發

在本逐步解說中,您可以使用自己的 C++ 程式,而不是輸入顯示的程式。 或者,您可以從另一個說明文章使用 C++ 程式碼範例。

必要條件

若要完成本逐步解說,您必須已安裝 Visual Studio 和使用 C++ 的選擇性 桌面開發工作負載,或命令列 Build Tools for Visual Studio。

Visual Studio 是 整合式開發環境 (IDE)。 它支援許多語言和平臺的完整編輯器、資源管理員、偵錯工具和編譯器。 可用的版本包括免費的 Visual Studio Community 版本,而且都可以支援 C 和 C++ 開發。 如需如何下載及安裝 Visual Studio 的資訊,請參閱 在 Visual Studio 中安裝 C++ 支援。

適用于 Visual Studio 的建置工具只會安裝建置 C 和 C++ 程式所需的命令列編譯器、工具和程式庫。 它非常適合建置實驗室或教室練習,而且安裝速度相對較快。 若要只安裝命令列工具,請在 [Visual Studio 下載 ] 頁面上尋找 [建置工具 for Visual Studio ]。

在命令列上建置 C 或 C++ 程式之前,請確認工具已安裝,而且您可以從命令列存取它們。 Visual C++ 對於命令列環境有複雜的需求,可尋找它所使用的工具、標頭和程式庫。 您無法在一般命令提示字元視窗中 使用 Visual C++,而不需要進行一些準備。 幸運的是,Visual C++ 會為您安裝快捷方式,以啟動已設定命令列組建環境的開發人員命令提示字元。 不幸的是,開發人員命令提示字元快捷方式的名稱及其所在位置幾乎在 Visual C++ 的每個版本和不同版本的 Windows 上都不同。 您的第一個逐步解說工作是尋找要使用的正確逐步解說工作。

注意

開發人員命令提示字元快捷方式會自動設定編譯器和工具的正確路徑,以及任何必要的標頭和程式庫。 如果您使用一般 命令提示字元 視窗,則必須自行設定這些環境值。 如需詳細資訊,請參閱 從命令列 使用 MSVC 工具組。 建議您使用開發人員命令提示字元快捷方式,而不是自行建置。

開啟開發人員命令提示字元

  1. 如果您已在 Windows 10 或更新版本上安裝 Visual Studio 2017 或更新版本,請開啟[開始] 功能表並選擇 [ 所有應用程式 ]。 向下捲動並開啟 Visual Studio 資料夾(而非 Visual Studio 應用程式)。 選擇 VS 的 [開發人員命令提示字元] 以開啟命令提示字元視窗。

    如果您已在 Windows 10 或更新版本上安裝 Microsoft Visual C++ Build Tools 2015,請開啟 [ 開始 ] 功能表並選擇 [ 所有應用程式 ]。 向下捲動並開啟 [Visual C++ 建置工具] 資料夾。 選擇 Visual C++ 2015 x86 Native Tools 命令提示字元 以開啟命令提示字元視窗。

    您也可以使用 Windows 搜尋函式來搜尋「開發人員命令提示字元」,然後選擇一個符合您已安裝版本的 Visual Studio。 使用快捷方式開啟命令提示字元視窗。

  2. 接下來,確認 Visual C++ 開發人員命令提示字元已正確設定。 在命令提示字元視窗中,輸入 cl 並確認輸出看起來像這樣:

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise>cl
    Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    usage: cl [ option... ] filename... [ /link linkoption... ]
    

    目前目錄或版本號碼可能有差異。 這些值取決於 Visual C++ 的版本和安裝的任何更新。 如果上述輸出與您看到的內容類別似,則表示您已準備好在命令列建置 C 或 C++ 程式。

    注意

    如果您收到錯誤,例如「'cl' 無法辨識為內部或外部命令、可操作的程式或批次檔」、錯誤 C1034 或當您執行 cl 命令時發生錯誤LNK1104,則表示您不是使用開發人員命令提示字元,或是安裝 Visual C++ 時發生問題。 您必須先修正此問題,才能繼續。

    如果您找不到開發人員命令提示字元快捷方式,或在輸入 cl 時收到錯誤訊息,則 Visual C++ 安裝可能會發生問題。 請嘗試在 Visual Studio 中重新安裝 Visual C++ 元件,或重新安裝 Microsoft Visual C++ 建置工具。 在命令正常運作之前 cl ,請勿繼續下一節。 如需安裝和疑難排解 Visual C++ 的詳細資訊,請參閱 安裝 Visual Studio

    注意

    根據電腦上的 Windows 版本和系統安全性設定,您可能必須以滑鼠右鍵按一下以開啟開發人員命令提示字元快捷方式的快捷方式功能表,然後選擇 [ 以系統管理員 身分執行] 成功建置和執行您遵循本逐步解說建立的程式。

建立 Visual C++ 原始程式檔,並在命令列上編譯

  1. 在開發人員命令提示字元視窗中,輸入 md c:\hello 以建立目錄,然後輸入 cd c:\hello 以變更至該目錄。 此目錄是來源檔案和已編譯器建立的位置。

  2. 在命令提示字元視窗中輸入 notepad hello.cpp

    當記事本提示您建立新檔案時,請選擇 [是 ]。 此步驟會開啟空白的記事本視窗,可供您在名為 hello.cpp 的檔案中輸入程式碼。

  3. 在記事本中,輸入下列幾行程式碼:

    #include <iostream>
    using namespace std;
    int main()
    {
        cout << "Hello, world, from Visual C++!" << endl;
    }
    

    此程式碼是簡單的程式,會在畫面上撰寫一行文字,然後結束。 若要將錯誤數降至最低,請複製此程式碼,再將其貼到記事本中。

  4. 儲存您的工作! 在 [記事本] 的 [檔案] 功能表中,選擇 [儲存]

    恭喜,您已建立可編譯的 C++ 原始程式檔 hello.cpp。

  5. 切換回開發人員命令提示字元視窗。 在命令提示字元中輸入 dir ,以列出 c:\hello 目錄的內容。 您應該會在目錄清單中看到原始程式檔 hello.cpp,如下所示:

    c:\hello>dir
     Volume in drive C has no label.
     Volume Serial Number is CC62-6545
    
     Directory of c:\hello
    
    05/24/2016  05:36 PM    <DIR>          .
    05/24/2016  05:36 PM    <DIR>          ..
    05/24/2016  05:37 PM               115 hello.cpp
                   1 File(s)            115 bytes
                   2 Dir(s)  571,343,446,016 bytes free
    
    

    您電腦上的日期和其他詳細資料會有所不同。

    注意

    如果您沒有看到原始程式碼檔案, hello.cpp 請確定命令提示字元中的目前工作目錄是您建立的 C:\hello 目錄。 也請確定這是您儲存來源檔案的目錄。 並確定您已使用 .cpp 副檔名儲存原始程式碼,而不是 .txt 副檔名。 如果您使用 命令,在命令提示 notepad hello.cpp 字元中開啟記事本,您的來源檔案會自動儲存在目前目錄中 .cpp 作為檔案。 當您以另一種方式開啟時,記事本的行為會有所不同:根據預設,記事本將擴充功能附加 .txt 至新檔案。 它也會預設在 Documents 目錄中儲存檔案 。 若要在 記事本 中儲存 .cpp 副檔名的檔案,請選擇 [ 檔案另存新檔 > ]。 在 [ 另存新檔] 對話方塊中,流覽至 C:\hello 目錄樹狀檢視控制項中的資料夾。 然後使用 [ 另存新檔類型 ] 下拉式清單控制項來選取 [所有檔案] [*.*]。 在 [ 檔案名] 編輯控制項中輸入 hello.cpp ,然後選擇 [ 儲存 ] 以儲存檔 案。

  6. 在開發人員命令提示字元中,輸入 cl /EHsc hello.cpp 以編譯器。

    cl.exe 編譯器會產生內含編譯後之程式碼的 .obj 檔案,然後執行連結器,以建立名為 basic.exe 的可執行程式。 此名稱會出現在編譯器所顯示輸出資訊行中。 編譯器的輸出看起來應該像這樣:

    c:\hello>cl /EHsc hello.cpp
    Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    hello.cpp
    Microsoft (R) Incremental Linker Version 14.10.25017.0
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    /out:hello.exe
    hello.obj
    

    注意

    如果您收到錯誤,例如「'cl' 無法辨識為內部或外部命令、可操作的程式或批次檔」、錯誤 C1034 或錯誤LNK1104,則開發人員命令提示字元未正確設定。 如需如何修正此問題的資訊,請返回開啟 開發人員命令提示字元 一節。

    注意

    如果您收到不同的編譯器或連結器錯誤或警告,請檢閱原始程式碼以更正任何錯誤,然後儲存並再次執行編譯器。 如需特定錯誤的相關資訊,請使用搜尋方塊來尋找錯誤號碼。

  7. 若要執行 hello.exe 程式,請在命令提示字元下,輸入 hello

    程式會顯示下列文字並結束:

    Hello, world, from Visual C++!
    

    恭喜,您已使用命令列工具編譯並執行 C++ 程式。

下一步

這個 「Hello, World」 範例與 C++ 程式可以取得的簡單一樣簡單。 真實世界程式通常會有標頭檔、更多原始程式檔,以及連結至程式庫。

您可以使用本逐步解說中的步驟來建置自己的 C++ 程式碼,而不是輸入顯示的範例程式碼。 這些步驟也可讓您建置許多您在其他地方找到的 C++ 程式碼範例程式。 您可以將原始程式碼放在任何可寫入的目錄中,並建置您的應用程式。 根據預設,Visual Studio IDE 會在 source\repos 子資料夾中的使用者資料夾中 建立專案。 舊版可能會將專案 放在 Documents\Visual Studio < version > \Projects 資料夾中。

若要編譯具有其他原始程式碼檔案的程式,請在命令列上輸入它們,例如:

cl /EHsc file1.cpp file2.cpp file3.cpp

/EHsc命令列選項會指示編譯器啟用標準 C++ 例外狀況處理行為。 如果沒有它,擲回的例外狀況可能會導致未擲回的物件和資源流失。 如需詳細資訊,請參閱 /EH (例外狀況處理模型)

當您提供其他來源檔案時,編譯器會使用第一個輸入檔來建立程式名稱。 在此情況下,它會輸出名為 file1.exe 的程式。 若要將名稱變更為 program1.exe,請新增 /out 連結器選項:

cl /EHsc file1.cpp file2.cpp file3.cpp /link /out:program1.exe

若要自動攔截更多程式設計錯誤,建議您使用 /W3 /W4 警告層級選項進行編譯:

cl /W4 /EHsc file1.cpp file2.cpp file3.cpp /link /out:program1.exe

編譯器 cl.exe 有更多選項。 您可以套用它們來建置、優化、偵錯及分析程式碼。 如需快速清單,請在開發人員命令提示字元中輸入 cl /? 。 您也可以個別編譯和連結,並在更複雜的建置案例中套用連結器選項。 如需編譯器和連結器選項和使用方式的詳細資訊,請參閱 C/C++ 建置參考

您可以使用 NMAKE 和 makefiles、MSBuild 和專案檔或 CMake,在命令列上設定及建置更複雜的專案。 如需使用這些工具的詳細資訊,請參閱 Visual Studio 中的 NMAKE 參考 MSBuild 和 CMake 專案。

C 和 C++ 語言很類似,但不同。 MSVC 編譯器會使用簡單的規則來判斷編譯器代碼時要使用的語言。 根據預設,MSVC 編譯器會將結尾 .c 為 C 原始程式碼的檔案,以及以 C++ 原始程式碼結尾的 .cpp 檔案。 若要強制編譯器將所有檔案視為與副檔名無關的 C++,請使用 /TP 編譯器選項。

MSVC 編譯器包含符合 ISO C99 標準的 C 執行時間程式庫 (CRT),但有輕微的例外狀況。 可攜式程式碼通常會如預期般編譯和執行。 MSVC 編譯器會取代某些過時的程式庫函式和數個 POSIX 函式名稱。 支援函式,但慣用的名稱已變更。 如需詳細資訊,請參閱 CRT 編譯器警告 (層級 3) C4996 中的安全性功能。

另請參閱

C++ 語言參考
專案和建置系統
MSVC 編譯器選項