逐步解說:在命令列上編譯原生 C++ 程式
Visual Studio 包含命令行 C 和 C++ 編譯程式。 您可以使用它來建立從基本控制台應用程式到 通用 Windows 平台 應用程式、傳統型應用程式、設備驅動器和 .NET 元件的所有專案。
在本逐步解說中,您會使用文本編輯器建立基本的 “Hello, World” 樣式C++程序,然後在命令行上加以編譯。 如果您想要嘗試 Visual Studio IDE 而不是使用命令行,請參閱 逐步解說:使用專案和方案 (C++) 或使用 Visual Studio IDE 進行C++桌面開發。
在本逐步解說中,您可以使用自己的C++程式,而不是輸入顯示的程式。 或者,您可以從另一個說明文章使用C++程序代碼範例。
必要條件
若要完成本逐步解說,您必須已安裝Visual Studio和選擇性 的桌面開發與C++ 工作負載,或命令行BuildTools 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 工具組。 建議您使用開發人員命令提示字元快捷方式,而不是自行建置。
開立開發人員命令提示字元。
如果您已在 Windows 10 或更新版本上安裝 Visual Studio 2017 或更新版本,請開啟 [開始] 功能表 並選擇 [所有應用程式]。 向下卷動並開啟 Visual Studio 資料夾(而非 Visual Studio 應用程式)。 選擇 VS 的 [開發人員命令提示字元] 以開啟命令提示字元視窗。
如果您已在 Windows 10 或更新版本上安裝 Microsoft Visual C++ Build Tools 2015,請開啟 [ 開始 ] 功能表並選擇 [ 所有應用程式]。 向下卷動並開啟 [Visual C++ Build Tools] 資料夾。 選擇 [Visual C++ 2015 x86 Native Tools 命令提示字元 ] 以開啟命令提示字元視窗。
您也可以使用 Windows 搜尋函式來搜尋「開發人員命令提示字元」,然後選擇一個符合您已安裝版本的 Visual Studio。 使用快捷方式開啟命令提示字元視窗。
接下來,確認 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++ Build Tools。 在命令正常運作之前cl
,請勿繼續下一節。 如需安裝和疑難解答 Visual C++的詳細資訊,請參閱 安裝 Visual Studio。注意
根據電腦上的 Windows 版本和系統安全性設定,您可能必須以滑鼠右鍵按鍵按下以開啟開發人員命令提示字元快捷方式的快捷方式功能表,然後選擇 [ 以系統管理員 身分執行] 成功建置和執行您遵循本逐步解說建立的程式。
建立 Visual C++原始程式檔,並在命令行上編譯
在開發人員命令提示字元視窗中,輸入
md c:\hello
以建立目錄,然後輸入cd c:\hello
以變更至該目錄。 此目錄是來源檔案和已編譯程式建立的位置。在命令提示字元視窗中輸入
notepad hello.cpp
。當 [記事本] 提示您建立新檔案時,請選擇 [是 ]。 此步驟會開啟空白的 [記事本] 視窗,可供您在名為 hello.cpp 的檔案中輸入程序代碼。
在 [記事本] 中,輸入下列幾行程序代碼:
#include <iostream> using namespace std; int main() { cout << "Hello, world, from Visual C++!" << endl; }
此程式代碼是簡單的程式,會在畫面上撰寫一行文字,然後結束。 若要將錯誤數降至最低,請複製此程式碼,再將其貼到記事本中。
儲存您的工作! 在 [記事本] 的 [檔案] 功能表中,選擇 [儲存] 。
恭喜您,您已建立C++原始程序檔,hello.cpp,準備好進行編譯。
切換回開發人員命令提示字元視窗。 在命令提示字元中輸入
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
,然後選擇 [儲存] 以儲存盤案。在開發人員命令提示字元中,輸入
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,則開發人員命令提示字元未正確設定。 如需如何修正此問題的資訊,請返回開啟 開發人員命令提示字元 一節。
注意
如果您收到不同的編譯程式或鏈接器錯誤或警告,請檢閱原始程式碼以更正任何錯誤,然後儲存並再次執行編譯程式。 如需特定錯誤的相關信息,請使用搜尋方塊來尋找錯誤號碼。
若要執行 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 中的安全性功能。