vs code配置c++開發環境

目的

使用集成開發工具visual studio寫c++程序的確方便,但是對於一般輕量的c++程序,特別是自己在跟着教程學習的過程中寫的一些練習的例子,沒必要每個工程都使用visual studio新建一個工程。

vs code作爲一款輕量級的編輯器,配合一系列插件也可以開發c++程序。但是第一次配置vs code的c++開發環境,還是花了我不少功夫的,主要是網上的教程大多都是基於vs code + mingW編譯器配置方案(我們安裝了visual studio,又何必多此一舉再去安裝別的編譯器?)。並且大多數都是翻譯官網的文檔,根本就配置不成功。

我們要開發c++程序,想必你的電腦已經安裝了vs studio,既然我們安裝了vs stdio,又何必多此一舉再去安裝mingW編譯器呢?本文從0到1教你如何結合vs code和vs studio的cl編譯器配置c++開發環境。

前提條件

  1. 安裝vs code;
  2. 安裝visual studio,版本隨意;
  3. 安裝c/c++插件;
    在這裏插入圖片描述
    前3步應該都沒有難度,如果這裏都搞不定的話,那你就在下面留言吧。

正文開始

假設我們暫時想使用vs code寫一個簡單的c++程序,按照如下流程:

  • 新建文件夾
    在任意位置新建一個文件夾,保存你的c++工程文件。比如我在桌面建立一個test文件夾,此時文件夾是空的,裏面什麼都沒有。

  • 使用vs code打開文件夾
    在這裏插入圖片描述

  • 編寫c/c++代碼
    在這裏插入圖片描述
    點擊這裏,添加一個文件,比如我的是main.cpp文件,然後愉快地寫一個簡短的c++程序:
    在這裏插入圖片描述
    你這裏可能就會有問題了,比如提示找不到頭文件,不能智能提示,別急,慢慢往下看。

  • 配置c_cpp_properities.json文件-----指定編譯器

到目前爲止,我們已經寫了一個cpp文件了,接下來就是各種配置,告訴vs code,使用什麼調試器和編譯器去編譯、鏈接我們這個cpp文件。首先要配置的就是c_cpp_properities.json文件。

使用快捷鍵:ctrl+shift+p打開命令面板,輸入c/c++(前提是你已經安裝了c/c++插件),選中Edit Configurations(JSON),然後vs code自動打開生成 .vscode文件夾,並在裏面生成c_cpp_properities.json文件,如下圖所示:

另外一個Edit Configurations(UI)其實也是配置c_cpp_properities.json的,只是以window ui的形式配置,更方便,配置完後也會自動生成c_cpp_properities.json文件

  • 注意:

很多教程這裏都是說的模棱兩可的,都說如果沒有 .vscode文件夾就自己手動建一個,沒有各種json文件也是自己手動建。實際上是不需要的,vs code已經爲我們定義好了各種json的模板,打開命令面板,搜索關鍵詞就可以找到那些json文件模板,其也會自動爲我們生成 .vscode文件夾,根本不需要我們手動建立。

在這裏插入圖片描述
在這裏插入圖片描述
其中,比較重要的是你的編譯器路徑,vs code一般會自動填充你的編譯器路徑。有時候可能vs code找到的cl編譯器路徑不正確,此時我們要手動填充正確的編譯器路徑,否則,vs code沒辦法編譯你的cpp文件(vs code只是一款可以安裝插件的編輯器,本質上與Windows自帶的文本編輯器沒什麼不同,自身不能編譯源碼)。

如果你的電腦是x64位的,vs studio爲了能編譯32位的應用程序,一般會同時安裝32位的編譯器和64位的編譯器,遺憾的是這兩個編譯器的名字都是cl.exe,我們無法從名字上區分。一般而言,32位的編譯器就在vs的安裝目錄下的bin目錄下,而64位的編譯器安裝在bin目錄下的x64或者amd64文件夾下,一般我們選擇64位的編譯器。

其他的幾個字段,比如includePath,顧名思義是指定你當前工程的包含目錄,可使用絕對路徑,也可使用默認的相對路徑,如果你的代碼十分簡單,都可以刪除這個字段(包含路徑默認是當前文件夾,即使我們不顯示指定包含路徑,vs code也會在當前文件夾下搜索)。

  • 配置task----告訴vs code編譯哪些文件

前面我們告訴了vs code使用cl.exe編譯器進行源碼編譯,還要告訴vs code要編譯哪些文件。tasks.json文件就是告訴vs code,我們要如何編譯cpp文件,編譯哪些cpp文件,編譯輸出是什麼等等。

還是打開vs code的命令面板,輸入task,選中Tasks:Configure Default Build Task,然後選擇c/c++:cl.exe build active file,如下圖所示:
在這裏插入圖片描述
在這裏插入圖片描述
選中task後,你的彈出來的選項可能與我這裏的不同,沒關係,隨便選一個就好了,一般選擇others,然後自動生成tasks.json文件,我們需要手動手動修改一些參數,如下圖所示:
在這裏插入圖片描述

一般你的生成的tasks.json文件與我的可能不同,沒關係,缺少的字段你按照我這裏的給補上去,多餘的你可以刪掉。這裏需要詳細講一下各個字段的含義,以及如何配置。

type:這裏一般爲shell,也許你的是echo,把它改爲shell
label:沒什麼用,用默認的就好,這裏不需要改。這個label就是待會你打開vs code的命令面板,輸入label指定的名稱就會定位到這個文件。
command:告訴vs code,我們使用cl.exe編譯器,其路徑在前面的c_cpp_properities.json定義的。
args:編譯參數,前面三個參數一般不需要改,使用默認的就好,如果你不指定也可以,後面編譯的時候會警告,具體參數的含義可以去visual studio裏查看,都有的,比如Zi的含義如下圖所示:
在這裏插入圖片描述
main.exe是我自己寫的,表示此項目編譯輸出的可執行文件名稱是main.exe,如果你要編譯靜態庫,則應該寫成xxx.lib

xxx.cpp:表示此項目編譯的cpp文件,如果你的只有一個main.cpp,則此處只需要添加main.cpp文件即可,總之,根據實際需要,需要編譯哪些cpp文件就增加哪些cpp文件即可。

其他字段:剩下的那些字段都是默認生成的,不需要管,如果你的沒有,你也可以不增加這些字段,但是上面的那些字段必須要有的。

  • 配置launch----告訴vs code如何調用可執行文件

前面我們已經告訴vs code使用cl.exe編譯器去編譯指定的cpp文件,當編譯成功時,編譯器在當前文件夾下輸出一個我們指定的可執行文件。其實到這裏就已經完成了,不需要在配置其他的了。我們直接雙擊那個可執行文件就會得到程序輸出的結果了。

但是我們想讓vs code爲我們提供一條龍服務,既然已經生成了exe文件,我們要如何使用tasks.json幫助我們生成的文件呢,而launch.json文件就是幫助我們做這個事情的。

還是一如既往地打開命令面板,搜索關鍵詞:launch,選中launch.json,如下圖所示。

在這裏插入圖片描述
這裏比較簡單,就是告訴vs code,我們要調用哪個exe可執行文件,在program字段處填充我們要調用的可執行文件即可。注意,這裏的可執行文件應該是我們前面配置的tasks.json時指定的輸出文件。

type:c++文件必須是cppvsdbg,一般這裏默認就好;
request:我們是調用這個可執行文件,這裏填launch(launch有調用程序的意思,我們一般安裝完一個軟件後,都會有launch xxx);
stopAtEntry:在入口點停止,一般程序的入口點就是main函數,如果這裏填入true,則會在main函數那裏停止,相當於打一個斷點;
cwd:current working directory,當前工作路徑,默認就好;
externalConsole:外部控制檯,如果這裏爲true,則vs code會爲我們調用cmd作爲程序的輸出打印設備,一般我們默認使用vs code的控制檯就好;

在這裏插入圖片描述

  • 編譯運行

所有配置都完成了,接下來就是編譯運行了。
編譯:快捷鍵:ctrl+shift+B,如果你的這個快捷鍵被win10的輸入法的emoj快捷鍵無情佔用,比如像我這樣的:
在這裏插入圖片描述
那就從命令面板中啓動調試吧,ctrl+shift+P,輸入關鍵詞task,找到Tasks:Run build task,如下圖所示。
在這裏插入圖片描述
編譯完後生成main.exe文件,如下圖所示。
運行:ctrl+F5,調用main.exe可執行文件,在vs code的控制檯輸出,如下圖所示。
在這裏插入圖片描述

錯誤處理

到目前爲止,爲了使用vs code爲我們編譯一個簡單的c++程序,我們做了太多的工作。這也是大部分教程講解vs code搭建c++編譯環境所講的內容,這裏我把配置每個json文件的目的都告訴你了,相信你有一個大致的瞭解了。

接下來纔是本文與其他的教程不一樣的地方,大部分教程到這裏就結束了,並且都是基於mingW編譯器的配置,然後正常編譯,執行,沒任何問題。可是如果你真的按照前面的步驟一步步來,我相信你的程序是不能正常編譯的。

cl.exe無法識別

第一個攔路虎就是編譯都不通過,如圖所示,提示無法識別cl.exe,出現這個問題是你沒有把cl.exe的路徑加到環境變量中。我們把cl.exe加到環境變量的path中就可以了,比如我的如下圖所示。

這裏cl編譯器路徑根據你實際的vs安裝位置確定,還要注意是32位的還是64位的。如果你的電腦是64位的,則添加64位的編譯器。
在這裏插入圖片描述
在這裏插入圖片描述
判斷編譯器是否添加到系統環境變量中的技巧
一般我們把cl編譯器加到環境變量中後,打開cmd,輸入cl,如果正常輸出編譯器的版本,則表明添加成功,如下圖所示。
在這裏插入圖片描述

找不到頭文件

我們在配置c_cpp_properities.json的時候並沒有指定比如iostream等系統頭文件,導致vs code識別不到iostream
在這裏插入圖片描述
解決這個問題很簡單,要麼在c_cpp_properities.jsonincludePath字段指定頭文件,要麼在系統環境變量中添加頭文件搜索路徑。在c_cpp_properities.json添加頭文件路徑,需要每個項目都要添加一遍,比較麻煩,我這裏選擇在系統的環境變量中添加頭文件路徑,一勞永逸。

如下圖所示,在系統環境變量中新建一個INCLUDE變量(必須是大寫),然後指定其路徑,把c++的頭文件路徑包含進去。

添加頭文件技巧

很多時候,我們自己也不清楚到底要添加哪些系統的頭文件。我們打開visual studio,新建一個空項目,然後編譯沒問題,說明visual studio已經默認爲我們添加了需要的頭文件,我們只要把visual studio爲我們添加的默認的頭文件添加到INCLUDE指定的路徑裏就可以了。那麼,vs爲我們默認添加了哪些頭文件呢,打開vs,依次找到VC++目錄,找到包含目錄,如下圖所示:(我的是英文版,我不知道中文版的vs這裏是怎麼翻譯的,將就看着吧,應該能看懂吧),把vs推斷的頭文件目錄都添加到INCLUDE中即可;
在這裏插入圖片描述

在這裏插入圖片描述

找不到庫文件

如下圖所示,我們添加了頭文件,編譯不會提示找不到頭文件的問題了,但是又提示找不到庫。在系統環境變量中添加LIB(必須是大寫),然後把系統的庫文件包含進來即可,到底需要添加哪些庫,還是看vs默認包含的庫目錄,如下圖所示。
在這裏插入圖片描述

在這裏插入圖片描述

重啓電腦,重啓電腦,重啓電腦!

我們把頭文件,靜態庫以及編譯器路徑都添加到環境變量中了,也許vs code還是會提示找不到路徑的問題,彆着急,重啓電腦即可。

使用cmd判斷是否配置成功----這一步不是必須的

重啓完電腦後,我們先不着急使用vs code編譯,先使用cmd調用cl編譯器編譯看看有沒有問題,看看我們的頭文件,靜態庫目錄是否都正確包含了。

如圖所示,打開cmd,輸入cl xxxx.cpp,其中,xxxx是你要編譯的cpp文件的完整路徑,如果正確輸出out: xxx.exe,則表明沒問題了,頭文件和庫目錄都正確包含了。
在這裏插入圖片描述

編譯的一些說明

  1. 仔細看看我的編譯情況,有一個編譯警告C4530,關於異常處理的警告,提示我們指定**/EHsc編譯參數,還記得我們配置Tasks.json**文件的時候,args 指定了編譯參數,我們在那裏指定了 /EHsc,就是告訴編譯器使用c++的異常。
  2. LNK2019錯誤。因爲我的main.cpp文件中還引用的Test.cpp文件,而我只指定了編譯main.cpp文件,沒有指定編譯Test.cpp,即我在編譯main.cpp的時候還需要調用Test.cpp文件,而我沒指定這個文件,編譯器就不鏈接這個文件,導致我的main.cpp鏈接失敗。再次回去看看我們前面配置的Tasks.json文件,編譯參數args 包括了我需要鏈接的所有cpp文件,所以編譯不會有問題。

開心的使用vs code開發c++吧

到目前爲止,我們所有的配置都完成了。然後編譯鏈接我們的程序即可。

編譯:ctrl+shift+B
運行:ctrl+F5

實際上我們第一次編譯生成exe可執行文件之後,ctrl+F5調用cmd執行沒任何問題。但是如果我們因爲某種原因修改了部分代碼,然後重新編譯生成exe文件,然後再次ctrl+F5就失效了,無法再次調用cmd執行可執行文件了。

我們一般可以選中要運行的可執行文件,右鍵選擇在終端打開,然後在終端輸入我們待運行的可執行文件即可。
在這裏插入圖片描述

工程結構

雖然說我們用vs code開發一些簡短的c++程序,但是把所有的cpp,hpp文件都放在同級目錄下,導致整個工程文件看起來很混亂,我一般喜歡按如下圖所示管理我的工程文件,include中放頭文件,src中放源文件,即頭文件與源文件分離,如果還需要包括靜態庫文件,則新建一個lib文件夾,這樣整個工程目錄看起來就清爽多了。
在這裏插入圖片描述
複雜的目錄結構並不會增加我們的配置,tasks.json,c_cpp_properties.json以及launch.json文件的配置不變,只是我們在寫cpp文件包含頭文件的時候,需要指定頭文件的路徑,比如:
在這裏插入圖片描述
這樣,使用vs code管理並執行一個簡短但又稍微複雜一點的工程文件就完成了。

調試輸出中文亂碼

由於我的系統是win10 中文版,系統默認的編碼格式爲GBK。但是vs code的源碼默認編碼格式爲utf-8,如下圖所示:
在這裏插入圖片描述
在這裏插入圖片描述
我們編譯可執行文件時,vs code把字符串按照utf-8的格式存儲,與我們的cmd默認編碼格式不一樣。我們可以臨時cmd窗口的編碼格式改爲utf-8來解決編碼不一致導致的亂碼問題(實際上我們也可以通過Windows的字體設置選項來設置整個Windows系統的默認編碼爲utf-8,但這種方式會導致你原有的gbk編碼的文件全部亂碼,得不償失)。

  • 查看cmd的編碼格式: chcp,如下圖所示,返回編碼頁936,這是gb2312格式

在這裏插入圖片描述

  • 輸入chcp 65001,設置當前編碼格式爲utf-8
    在這裏插入圖片描述
  • 亂碼解決
    在這裏插入圖片描述

結束

現在再看看當初的配置過程,仔細想想其實並不複雜。最大的難度在於我們不知道配置每個json文件的目的,還有可能對編譯過程不瞭解,更談不上設置編譯參數了。

發佈了5 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章