作者:極客小俊
一個把邏輯思維轉變為代碼的技術博主
概述
編譯器,可以簡單地將它理解為一種翻譯器, 就類似于專門的翻譯一樣, 要知道,計算機只認識二進制也就是 0 和 1 組成的代碼指令
而我們平常所編寫和開發的的 C 、C++、java、php、Go、python等等代碼計算機本身是根本無法識別的,只有將這些程序代碼中的每條語句翻譯成對應的二進制指令,計算機才能執行, 這就是編譯器的核心作用!
GCC 全稱 GNU Compiler Collection 是由GNU開發的編程語言編譯器 所以說 GCC就是C語言的翻譯器
那么GNU又是一個什么鬼? 這是一個了不起的計劃 什么計劃呢? 說到這個就不得不說一下歷史了
在 1983 年 有一個叫理查德·斯托曼的人發起的名為GNU計劃 他的目標是打造出一套完全自由也就是自由使用、自由更改、自由發布、開源的操作系統, 你可以理解為不要錢! 然后這個系統就暫定為GNU 操作系統并且也設計出了這套系統的內核并命名為The Hurd
但是這個計劃還沒有搞出個啥花樣就橫空出世了另外一個開源操作系統Linux, 這個大家都知道吧 , 所以最終經過種種事情之后(此處省略幾百字) , GNU 計劃選擇Linux 作為 GNU 操作系統的內核, 那么GNU有了這個Linux基礎之后就基于這個平臺開發了許多系統的部件 其中就有一個部件叫做GCC
現在有些人叫GNU/Linux 還有些人直接就叫Linux 也就是這么來的, 所以有的時候你可以理解為GCC就是為開源系統打造的一款編譯器也可以說是Linux 下的C/C++ 編譯器
最初GCC 的確只是用來翻譯C語言的, 隨著時間的迭代不斷的更新 ,不斷的進步,GCC的翻譯功能也得到了很大的擴展, 它不僅可以用來編譯 C 語言,還可以編譯 Fortran、Pascal、Objective -C、Java、Ada、Go 等多種編譯語言所編寫的代碼
那么此時此刻的GCC功能上也已經不在單一了,而是一整套的組合拳功能, 是支持多種程序語言的編譯器,算是一種編譯器合集Compiler Collection 后來就被叫做 GNU編譯器套件
GCC和Linux淵源極深, 目前幾乎所有的 Linux 發行版默認安裝有 GCC編譯器
我們既然學習的是C語言,那么GCC的核心目的是將我們編寫的C語言程序編譯成一個二進制可執行文件
GCC編譯器本身是沒有界面窗口,使用它必須編寫對應的gcc 命令, 所以熟悉gcc命令就顯得很重要了,否則你怎么編譯你的C語言程序代碼呢?
當然你也可以使用集成開發環境IDE 這些通常都集成了 GCC 編譯器,例如:Visual Studio 2019, 集成了GCC 編譯器功能的同時,還向用戶提供了友好的可視化編輯界面, 不用你去記憶那么多的gcc命令照樣可以肆無忌憚的編譯你的C語言程序代碼, 相對而言降低了學習成本, 但個人建議GCC的基本命令還是要學一下
但不是所有的IDE都集成了GCC的, 如果沒有集成GCC 那么你就可能只有通過手工來進行代碼的編譯操作,也就是通過GCC的命令,來執行你的C語言文件, 這個就要分人了,有些人喜歡可視化操作,有些人習慣了命令行操作用相應的 GCC命令來編譯C語言或其他程序
概述
MinGW 全稱是:Minimalist GNU on Windows 你可以暫時理解它是一個移植到了 windows系統平臺下的極簡GCC編譯器
我們知道GCC是在Linux系統上自動就預裝好了的編譯器, 那么我們有了MinGW 就可以在windows系統中使用GCC編譯器了, 也就是說可以將C語言的源代碼編譯生成 Windows 下的可執行程序
小提示: 官網提供的 GCC 編譯器是無法直接安裝到 Windows系統平臺上的, 如果我們想在 Windows 平臺使用 GCC 編譯器,就要安裝 GCC 的移植版, 也就是 MinGW 當然還有Cygwin這就不過多贅述了!
總的來說 MinGW 就是 GCC 的 Windows 版本
MinGW 是開源軟件,免費使用,一些開源社區持續維護, 支持最新的 C語言 標準
題外話并且目前很多IDE里面集成有GCC, 但實際只是也就是將 MinGW 封裝在這些IDE里面 ,讓MinGW有圖形化界面,操作簡單,但內核其實就是MinGW
如果你選擇的是一些IDE自帶的編譯器來編譯C語言, 可能會自動生成一大堆雜七雜八的工程文件, 搞得新手摸不著頭腦, MinGW 則只會生成一個可執行文件
所以對于初學 C語言 的朋友來說,MinGW 是一個不錯的選擇
總體來說MinGW 就是需要你動動手, 會一些gcc命令 等等就可以來對C語言的源代碼進行編譯成window下的可執行文件
而一些IDE則是通過點點按鈕就自動編譯了,不需要你使用gcc的一些相關命令都可以
MinGW的下載地址如下:
https://osdn.net/projects/mingw/
https://sourceforge.net/projects/mingw-w64/files/
打開地址后在其中找到 Downloads 下載鏈接, 單擊進入稍等片刻就開始下載了
下載方式
下載完成后,會得到一個名為 mingw-get-setup.exe 的安裝包,雙擊打開它,
可以看到如下的對話框, 直接點擊Install,即可
根據你自己的需求點擊change按鈕可以修改安裝路徑,建議不要在C盤, 這里我安裝在D盤, 然后點擊continue
進入 MinGW 配置器下載的界面,稍等一下, 待安裝完成顯示 100%就可以了, 安裝完成之后點擊continue,會自動彈出MinGW Installer Manager配置界面
進入到 MinGW Installer Manager 的界面, 它的作用是隨時根據需要修改 GCC 編譯器的配置
為了同時支持編譯 C 語言 和 C++我們這里只需要選擇兩個選項:
mingw32-base-bin這個是用來編譯C語言的
mingw32-gcc-g++-bin 這個是用來編譯C++語言的
如圖
在指定的選項上單擊鼠標左鍵 選擇Mark for installation打上安裝標記就可以了, 如果選擇錯誤了就點選Unmark取消標記就可以了,
個人建議全部選擇免得麻煩!!
選擇好了之后, 在菜單欄中選擇Installation ----> Apply Changes
會彈出如下對話框 ,點擊Apply 然后稍等片刻,直至安裝成功即可!
當安裝成功之后 顯示如下圖, 點擊close按鈕關閉即可!
到此MinGW安裝就完成了!
并且在我的D盤的MinGW目錄下會出現以下文件夾
小提示
如果有某些組件下載失敗,沒關系, 可以通過之前的MinGW Installer Manager安裝界面進行手動選擇指定的安裝包進行再次安裝 ,比如說安裝完成之后你會發現bin目錄下沒有gcc這個執行程序
那么就可以通過MinGW Installer Manager來進行再次手動的選擇安裝 就可以了
所以MinGW Installer這個程序新手朋友們不要刪除哦 , 免得到處找都找不到~
科普一下 為什么要設置環境變量?
舉個栗子
比如: 我們這里需要gcc.exe執行程序來編譯C語言源代碼, 那么這個gcc.exe程序文件在我電腦中的路徑是D:\MinGW\bin下的
如圖
那么如果我們要使用cmd命令行的形式來打開這個gcc.exe 是不是要使用一些基本的dos命令來進入到這個目錄下對吧
如下圖
通過這樣子的方式來打開gcc 你不覺得很麻煩嗎?但是難道我們每次要運行這個程序的時候都要先找到該.exe文件所在的路徑, 然后運行,顯然很蹩腳, 這時候就需要環境變量了
環境變量是在操作系統中一個具有特定名字的變量對象,它包含了一個或者多個應用程序所將使用到的信息
當要我們求操作系統來運行一個程序的時候, 但又沒有告訴它程序所在的完整路徑時,那么操作系統除了在當前目錄下面尋找此程序外,還會自動的到環境變量中的Path路徑去找 用戶通過設置環境變量,來更好更加方便的來運行程序!
所以我們的gcc.exe 也應該配置到 環境變量中去,方便我們執行編譯的操作!
如何手動配置gcc.exe到環境變量中?
我們依次打開 我的電腦----->屬性 -----> 高級系統設置-----> 環境變量
win10系統中有兩種環境變量:用戶變量和系統變量
可以配置到當前用戶變量的Path里面, 也可以配置到系統變量的Path里面
系統變量配置以后,整個計算機操作系統的所有用戶有效
用戶變量配置以后,僅對于當前計算機用戶有效。
而系統變量與用戶變量的Path的意思都是告訴操作系統在找的可執行文件存放的路徑,它的查找流程如下:
1.當操作系統在執行一個用戶命令或打開一個程序時,如果沒有給出給文件的絕對路徑,那么就會在當前目錄下尋找相應的可執行文件
2.如果當前目錄找不到對應可執行文件或程序,就會在`系統變量`的`Path`的路徑列表中去尋找, 從上到下依次查找,最前面一條的優先級最高,如果找到程序就停止查找,后面的路徑也不再執行了
3.如果`系統變量`的`Path`中的路徑列表都找不到,那么再到`用戶變量`的`Path`路徑列表中去繼續尋找
所以系統變量針對所有用戶,而用戶變量是當前用戶私有的, 這個根據你自己的情況來選擇就可以了
我這里就暫時配置到系統變量的Path中去, 選中Path 然后點擊編輯按鈕, 然后點擊新建按鈕
我這里的gcc.exe目錄為D:\MinGW\bin, 那么新建之后的值就為它, 完成之后點擊確定返回就可以了!
如圖
到此環境變量的配置就完成了, 選中就可以編譯我們的C語言程序代碼了
你可以先打開cmd命令行窗口 輸入以下命令先測試一下:
gcc++ --version
g++ --version
gdb --version
如果看到以下輸出 說明正確配置了環境變量
卸載MinGW很簡單, 找到MinGW的安裝文件夾, 然后鼠標右鍵單擊選擇刪除,就可以卸載了
并且把之前配置好的path環境變量的相應目錄路徑也刪除掉!
win10下如何打開環境變量
我的電腦----->屬性------->高級系統設置----->選擇高級選項卡, 在最下面就可以看到環境變量
然后打開環境變量之后 點開, 再找到系統變量, 其中就有一個Path的變量, 點擊編輯
然后找到之前配置的MinGW目錄 刪除就可以了!
通過以上的安裝和環境變量的配置之后,我們就可以在當前 Windows 平臺上編譯和運行我們的 C 或者 C++源代碼程序了
舉個栗子我們現在要輸出一個經典的Hello, World!字符串
代碼如下
#include<stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
打開記事本程序,復制一下以上的代碼
然后另存為 hello.c文件 , 我這里就暫時保存到桌面
如圖
然后在桌面打開cmd 在命令行中執行如下命令:
C:\Users\Administrator\Desktop>gcc hello.c -o test1
然后就會在桌面上生成一個test1.exe的可執行文件, 再次在命令行中輸出這個test1名稱即可輸出最終結果!
如圖
概述
每次通過記事本和cmd方式單獨地使用gcc編譯器來輸出你的C語言代碼肯定不太方便對吧,那么就選擇一款IDE集成開發環境來編輯你的C語言代碼吧!
IDE 英文全稱為: Integrated Development Environment 中文意思就是 集成開發環境
集成開發環境的的核心作用就 用來編寫代碼的
使用IDE的好處
以上這些功能都被融入在了 集成開發環境當中!
這里在windows系統下我個人推薦CLion、Visual Studio Code、Visual Studio , 當然最好是你通過一段時間的C語言學習之后,再來使用這些IDE工具肯定會更加得心應手! 如果你是新手其實不建議一上來就使用IDE
CLion 下載地址 https://www.jetbrains.com/clion/
使用CLion 來編譯C語言,你總要先下載安裝吧,建議若條件允許購買正版吧,你懂的 這里就不在過多贅述了!
安裝好CLion 之后打開它, 然后點擊New Project
然后彈出以下對話框, 選擇C Executable 之后根據你自己的需求設置項目保存路徑,Language standard語言標準選擇C99就行了, 完成之后點擊create就可以自動生成項目了
如圖
然后你就會看到自動生成好的項目的目錄結構和一段基本的C語言代碼
在CLion中配置MinGW
如果之前你安裝了MinGW 那么最好在這里也在CLion配置一下, 方法如下
點擊File菜單下的Settings選項
然后選擇Build、Execution、Deployment(構建、執行、部署)選項下的Toolchains(工具鏈)選項
它會自動檢測到MinGW的安裝路徑, 確保這里沒有任何問題之后點擊ok
最后我們就可以點擊右上角綠色的的Run按鈕 開始編譯我們的C語言代碼了
CLion控制臺輸出中文亂碼
如果你想用printf輸出中文,但是出現以下亂碼的情況
如下圖
解決辦法:
既然是亂碼 那么肯定是編碼不正確導致的,所以修改一下CLion中的編碼設置就可以了
首先最好保證我們整個項目的文件編碼統一
點擊File菜單下的Settings選項, 然后選擇Editor下的File Encodings(文件編碼)
把所有位置都設置為UTF-8編碼 ,這是為了你在代碼區編輯中文的時候 編碼統一
如下圖
然后點擊右下角的UTF-8位置,會彈出當前輸出窗口的內容編碼, 這里修改為GBK編碼
然后會彈出一個對話框選擇Convert轉換按鈕就可以了
最后就可以正常輸出中文字符串了!
修改控制臺活動頁字符集
當然如果懂一點的朋友 可以通過修改控制臺代碼頁字符集為utf-8這樣來解決CLion漢字中文亂碼問題
只要在源代碼中加入一行代碼就可以了
代碼如下
#include <stdio.h>
int main() {
system("chcp 65001"); //修改控制臺活動頁字符集為utf-8
printf("北京市, 朝陽區!\n");
return 0;
}
如圖
這樣不用在底部修改當前輸出窗口的內容編碼也是可以達到不會亂碼的效果!
Visual Studio Code我主要是用來寫前端,對于java和C這樣要編譯的語言來說用它來寫就要做一定的配置和環境的搭建,因為默認情況下VS code不能直接對于C語言進行編譯和調試的 所以雖然不是很方便,但是它免費啊!
要使用VS code來編輯和運行我們的C語言代碼,前提是要下載好VS code和提前安裝好集成gcc的MinGW
Vs code下載地址: https://code.visualstudio.com/
下載和安裝這里就不過多贅述了,很簡單 !
打開VS code 直接在插件市場中搜索以下插件:
C/C++
Code Runner
C/C++ GNU Global
C/C++ Compile Run
點擊這些插件上的Install按鈕, 先把這些插件都安裝上!
安裝完以上插件之后,隨便在那個磁盤下建立一個test_c的空目錄
然后選擇File---->Open Folder 選擇你剛才創建的空文件夾目錄
如圖
也可以選擇Add Folder to workspace..來添加工作目錄
然后在左側就可以顯示出剛才所選擇的文件夾目錄了,這也就是你的項目文件
接下來就新建一個.c的代碼文件
如下圖
我們在test_c文件夾下新建一個名為hello.c的文件,然后復制以下代碼
#include <stdio.h>
int main() {
printf("hello world!\n");
return 0;
}
最后點擊右上角的運行按鈕就可以執行C語言代碼程序了!
效果如下圖
概述
Visual Studio我們簡稱VS 是美國微軟公司的集成開發環境, 可不是VS code哦這兩個不一樣的!, 它可以支持C、C++、C#、F#、J# SQL Python等語言的開發 還是很強大的一款IDE
Visual Studio下載地址https://visualstudio.microsoft.com/zh-hans/downloads/
個人的話建議下載社區版免費的,學習和普通開發完全足夠了, 安裝非常簡單 就不過多贅述了!
安裝的時候唯一只有一個地方要注意的就是: 使用C++桌面開發這一項要勾選上,否則可能會導致你的C或C++代碼無法正常運行!
如圖
VS 新建項目
安裝好了之后打開VS
然后在彈出的對話框中選擇c++空項目
接下來就填寫項目配置了
項目名稱之后生成的項目文件夾名稱和工程名稱都是這個, 這個目錄會自動生成!
項目位置也就是選擇你項目保存的目錄位置
勾選解決方案和項目放在同一目錄中,以后便于調試。
單擊創建, 此時應該在桌面會生成一個test_c的文件夾目錄
然后就也進入到VS的編輯界面了 , 接下來添加C語言代碼源文件
在左側的解決方案下方的test_c項目文件夾中,選中源文件 右鍵單擊然后選擇添加---->新建項
如圖
小提示: 如果你在左側沒有看到解決方案資源管理器的話 那么可以按下鍵盤上的快捷鍵ctrl+Alt+L來進行打開
然后選擇C++文件(.cpp), 把文件名稱的后綴需要修改為.c 這里我新建名為hello.c的源文件
如下圖
然后還是輸入以下代碼
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
接下來按下快捷鍵Ctrl+F5直接編譯運行, 結果如下圖所示
到此你已經開啟C語言的學習之路了!
"點贊" "評論" "收藏"
大家的支持就是我堅持創作下去的動力!
如果以上內容有任何錯誤或者不準確的地方,歡迎在下面 留個言指出、或者你有更好的想法,歡迎一起交流學習
VS Code作為一款最受程序員歡迎的輕量級的程序編輯器,在使用方面有著無可替代的靈活性與優勢。但同樣由于其輕量級和靈活性,在進行開發時,也有很多需要自行手動配置的地方,不像其臃腫的同門兄弟Visual Studio(雖然VS Code與Visual Studio相似之處僅僅在于名稱和同是微軟出品)那樣,讓很多操作都傻瓜化。對于新手來說,傻瓜化的操作當然有其便捷性,但失去了配置的過程,很多人雖然在VisualStudio下可以寫出能執行的代碼,但始終連程序是如何編譯、鏈接到運行的都搞不懂。
在VS Code官方文檔中,對各種開發語言的配置方式都有詳盡的介紹,在Windows下進行C/C開發時,官方提供了三種不同的配置方式,分別是使用Microsoft C,Windows下的GCC和利用Windows10內置的WSL linux子系統的GCC進行開發和配置。本文僅就后兩種方式進行示例和介紹。
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
最后一行code .命令是在命令行下快速調用code打開當前文件夾的指令,在實際使用中非常方便。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
}
按照官方的指導,要在Windows下安裝開源的GCC編譯器,需要安裝Mingw-w64,這是GCC在Windows下運行的版本。在Mingw-w64官網可以開到不同的發行版本,一般來說推薦僅安裝官方的mingw-w64即可,但由于國內網絡環境的原因,直接安裝mingw-w64可能是非常緩慢甚至難以成功的。這里選擇安裝mingw-w64的一個名為MSYS2的發行版進行安裝,并通過清華大學開源軟件鏡像站進行加速。
按照清華大學開源軟件鏡像站(或者USTC鏡像)的官方說明,在該網站MSYS2文件夾下的distrib/目錄下選擇相應的名為msys2-<架構>-<日期>.exe文件下載并安裝。一般建議直接安裝在 C:/msys2 目錄下。安裝完成后,在該目錄下查找并編輯以下文件,以使用清華開源站的軟件倉庫來代替默認的海外倉庫:
編輯 /etc/pacman.d/mirrorlist.mingw32 ,在文件開頭添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
編輯 /etc/pacman.d/mirrorlist.mingw64 ,在文件開頭添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
編輯 /etc/pacman.d/mirrorlist.msys ,在文件開頭添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
然后打開msys2.ext文件,在命令行執行 pacman -Sy 刷新軟件包數據.
pacman是arch linux下的包管理器,與centos下的yum或者ubuntu下的apt類似。要在msys2下查找并安裝linux兼容的軟件包,需要通過pacman進行。
常用的pacman命令包括:
pacman -Sy 更新軟件包數據
pacman -R package-name 刪除軟件包
pacman -S package-name 安裝軟件包
pacman -Syu 更新所有
pacman -Ss xx 查詢軟件xx的信息
安裝gcc,gdb。可以根據需要選擇安裝32位或64位gcc,gdb發行版。
如果需要安裝32位軟件包??奢斎?/p>
pacman -S mingw32/mingw-w64-i686-gcc
pacman -S mingw32/mingw-w64-i686-gdb
如果要安裝64位包,可以相應的改為mingw64/mingw-w64-x86_64-gcc等。也可以直接將gcc改為toolchain,可完整安裝整個工具鏈。
安裝完成后,需要將對應的c:/msys2/mingw32/bin或者c:/msys2/mingw64/bin添加到windows系統路徑的path下。添加方式如下:
(Win+R并輸入control)打開控制面板-->系統-->高級系統設置
在彈出窗口中選擇高級-->環境變量,在下方的系統變量中尋找Path并雙擊。選擇新建并輸入上述路徑(msys2以及相應的軟件包對應的安裝路徑)
打開命令行,輸入下列命令,如果能看到相應的版本信息,則說明安裝和路徑設置成功。
C:\Users\weizy>g++ --version
g++ (Rev1, Built by MSYS2 project) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
C:\Users\weizy>gdb --version
GNU gdb (GDB) 9.1
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
回到helloworld.cpp文件所在的目錄下,用vs code打開文件夾,選擇Terminal-->Configure Default Build Task(終端,配置默認build任務),選擇c/c++: g++.exe build active file,會創建一個新的tasks.json文件。參考官網示例編輯該文件如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++.exe build active file",
"command": "C:\\msys2\\mingw32\\\bin\\g++.exe",
"args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe"],
"options": {
"cwd": "C:\\msys2\\mingw32\\bin"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
關閉task.json文件并回到helloworld.cpp文件(否則系統會認為要編譯的文件是task.json)。選擇Terminal-->Tasks:Tun Build Task (終端-->任務:執行編譯任務),快捷鍵為Ctrl+Shift+B (這個快捷鍵和我的輸入法表情文件沖突,需要修改掉)。一切正常的話編譯會迅速完成,并在相同目錄下生成helloworld.exe文件。在終端運行 .\helloworld.exe可以看到文件的輸出結果。
可參考微軟官方的WSL子系統安裝說明,從windows store或者命令行下載并安裝。windows server也可以下載并且手動解壓縮和安裝。這里在windows商店中搜索并安裝ubuntu18.04版本。安裝過程中兩個常見的錯誤及解決方案如下:
安裝完成后,在開始菜單中搜索Ubuntu即可打開WSL的ubuntu linux子環境,在命令行輸入bash也可直接進入ubuntu bash‘中。第一次今進入WSL子系統時需要設置Linux子系統的用戶名和密碼。
為了提高訪問速度,這里同樣使用清華大學開源軟件站的倉庫替換默認的Ubuntu倉庫。方法為修改ubuntu文件/etc/apt/sources.list(修改前建議先備份該文件),將文件內容替換為以下內容,保存文件后輸入sudo apt-get update,即可通過清華大學開源軟件站倉庫更新軟件。
# 默認注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# 預發布軟件源,不建議啟用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
在WSL子系統中輸入以下命令以安裝編譯環境。
sudo apt-get install build-essential gdb
安裝完成后可輸入以下命令檢查是否安裝成功。
whereis g++
whereis gdb
安裝完VS Code的Remote-WSL插件后,可以通過下列方式在VS Code中打開WSL子系統。
通過VS Code打開子系統后,同樣需要為WSL子系統安裝C/C插件,以實現后續的調試等功能。在插件欄中搜索C安裝即可。
和前一節類似地,在WSL中新建helloworld文件夾,并在其中新建helloworld.cpp文件。參考VS Code官網配置tasks.json文件如下。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "/usr/bin/g++",
"args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
注意:
mkdir /mnt/d/wsl
ln -s /mnt/d/wsl ~/wsl
一般來說,程序設計不可能一蹴而就就可以編譯成功的。在編譯前可能需要大量的調試工作。和編譯類似,程序調試也需要在VS Code中進行配置。選擇Run-->Add Configuration(運行-->添加配置)添加配置,選擇C++(GDB/LLDB)(如果默認沒有出現,則需選擇最下面的more進行安裝相應插件)。在下拉菜單中選擇需要的編譯器,使用windows下的gcc時選擇g++.exe,使用WSL子系統時選擇g++ build and debug active file.截圖分別如下。
該選擇會生成不同的launch.json文件。在windows系統的gcc編譯器下launch.json文件如下(目錄已修改為和實際目錄一致)
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys2\\mingw32\\bin\\gdb.exe",
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++.exe build active file"
}
]
}
在WSL子系統下的lauch.json配置文件如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
回到helloworld.cpp下,按F5或者選擇Run-->Start Debugging開始進行程序調試。如果使用過Visual Studio或者其他IDE工具,就會發現其中的相似性,在程序段左側的代碼行數標識左邊,可以通過鼠標給程序打斷點(break point),這樣在調試時遇到相應斷點會自動停下,這在調試時都是很有用的功能。
關于調試另外一個很有用的功能是watch。在調試開始后,程序欄左側會出現watch窗口。在watch窗口中可以輸入想要監視的變量,例如本例中的變量名為word的變量。雙擊watch窗口下的空白處并輸入watch,在程序步進執行(上圖中按鈕)時,就可以看到隨著程序執行,watch變量不斷變化的值。這個比起調試時用print輸出變量要方便又好用的多。