VSCode 的第一個C++程式(windows)[更新2018.10.28]
所有的第一次都只是用來熟悉一下操作的,肯定是無法滿足實際的需求的,所以進行了這次的更新。
更新內容:
- 採用了makfile去編譯生成中間檔案和可執行檔案;
- 採用了多目錄的檔案樹,將原始檔、標頭檔案、中間檔案以及可執行檔案分別存放在不同的目錄中;
- makefile檔案支援跨平臺(windows , linux),只需要修改一個引數就可以了,具體內容一看便知;
- 支援多個原始檔,畢竟實際工作學習中不會只建立 一個main.cpp吧;
- vscode的C++專案的配置都跟著專案走,也就說只要其它平臺和機器上的vscode的外掛都有,其它必備的條件(windows:MingW, Linux: gcc,g++, gdb, cmake)都具備了,那麼這個工程就可以在其它平臺或機器上運行了。我們就不用費心費力的一個一個的修改新增配置檔案了。
下面是專案模板的檔案樹:
│ .gitignore
│ makefile
│ README.md
│
├─.vscode
│ c_cpp_properties.json
│ launch.json
│ settings.json
│ tasks.json
│
├─Headers
│ .gitkeep
│
├─Output
│ │ makefile
│ │
│ └─bin
│ makefile
│
└─Sources
main.cpp
引言
VSCode作為微軟推出的一款免費的輕量級的整合開發環境,可謂是良心之作。它擁有VS的高顏值,而且像瑞士軍刀一樣,擁有豐富的外掛,c/c++、java、python、js、html等等,它都能輕鬆駕馭。
目錄
安裝
VSCode的安裝
MinGW的安裝
在VSCode的C/C++擴充套件中並不包含C++編譯器或偵錯程式,所以我們需要自己安裝這些工具。流行的C++編譯器是Windows的MinGW,MacOS的XCode的Clang和Linux上的GCC。
MinGW的下載
MinGW的安裝也沒有什麼特別之處,唯一要注意的地方就是,記住你的安裝路徑,這很重要。
安裝完成之後,開啟軟體,選擇我們需要的包下載。具體看下面的圖片:
![image_1cfiv3eqv1j1u1mhivvori1uv3m.png-42.8kB][2]
選擇好了之後,點選 Installation
->Apply Chagnes
Apply
。注意:下載過程中可能會失敗,失敗了就再次點選
Apply
重新下載,還出現失敗,就翻牆吧!下載完成後,就需要新增系統環境變量了。
我MinGW的安裝目錄在F盤。
將F:\MinGW\bin
路徑新增到環境變數中。
然後重啟你的電腦,在cmd中或者Windows PowerShell 中輸入gcc -v
驗證一下。下圖是成功的範例。
Get Started
開啟VSCode,我們可以看到它的歡迎介面。
安裝外掛
在VSCode編寫和除錯程式是需要安裝相關的外掛才能進行的。
在這裡我們選擇安裝C/C++
、C++ Intellisense
、Code Runner
和Include Autocomplete
這四外掛。
我們點選擴充套件
的圖示,在搜尋欄裡搜尋外掛的名稱。
點選安裝
,在安裝完成之後,點選重新載入
,這個外掛就會生效。
其它的外掛的安裝也是如此。
helloworld
新建一個helloword
資料夾,作為我們此次的工作區。在資源管理器中開啟這個資料夾。
開啟這個資料夾後,會發現資料夾沒有原始檔。這時我們需要新建一個helloworld.cpp原始檔。
這時我們可以編寫helloworld程式了。
配置智慧感知
由於資料夾的配置資訊不完整,我們需要自己新增缺少的配置資訊。通過快捷方式Ctrl+Shift+P
執行C/CPP: Edit configuration ...
命令新增缺少的資訊並生成c_cpp_properties.json檔案。
在c_cpp_properties.json
檔案中找到如下部分(可能與我的不太一樣)
因為我們的系統是windows,所以找win32
就能快速的瀏覽到需要配置的區域。
更改的最終結果:
"compilerPath": "F:\\MinGW\\bin\\gcc.exe",
新增這一條,設定gcc.exe的路徑(根據自己實際gcc.exe路徑新增)。
直觀的效果就是引用標頭檔案出現的綠色波浪線沒了。
構建程式碼
如果你想從VS Code構建你的應用程式,你需要生成一個tasks.json檔案;
開啟命令面板(Ctrl + Shift + P)。選擇Tasks:Configure Tasks ...
命令,單擊從模板建立tasks.json檔案
,您將看到任務執行模板列表,選擇Others。
最終生成tasks.json檔案。
將檔案內容修改如下:
我們將當前頁面調整到我們的源程式編輯頁面,點選右上角的小三角形,即可執行我們的程式了。到目前為止,helloworld程式就這樣順利運行了。
程式的輸出在終端中顯示,如果要在終端向程式輸入資料,那麼還需要進行一點配置。
在命令面板(Ctrl+Shift+P)搜尋使用者配置
,在使用者配置檔案中,找到Run Code configuration
下的code-runner.runInTerminal
的值改為true
,更改後的結果在右邊。
除錯程式碼
為了能夠除錯,我們還需要生成launch.json
檔案。
瀏覽到除錯的視窗,去新增配置。選擇C++(GDB/LIDB)
,生成launch.json
檔案。
將launch.json檔案內容更改如下:
在進行除錯(F5)的時候,一定要將當前頁面調整到我們的源程式編輯頁面。不然會出錯。
寫在最後
萬事開頭難,其實也不難,只要掌握了方法,一切都不是問題,在寫完helloworld程式之後,再寫其他的程式就可以把.vscode
直接拿來用,略作修改即可。
附:json檔案原始碼
//tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build", //在launch.json檔案中會用到
"type": "shell",
"command": "g++",
"args": [
"-g", "helloworld.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
// launch.json
{
// 使用 IntelliSense 瞭解相關屬性。
// 懸停以檢視現有屬性的描述。
// 欲瞭解更多資訊,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示
"type": "cppdbg", // 配置型別,這裡只能為cppdbg
"request": "launch", // 請求配置型別,可以為launch(啟動)或attach(附加)
"targetArchitecture": "x86", // 生成目標架構,一般為x86或x64,可以為x86, arm, arm64, mips, x64, amd64, x86_64
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", // 將要進行除錯的程式的路徑
"args": [], // 程式除錯時傳遞給程式的命令列引數,一般設為空即可
"stopAtEntry": false, // 設為true時程式將暫停在程式入口處,一般設定為false
"cwd": "${workspaceFolder}", // 除錯程式時的工作目錄,一般為${workspaceRoot}即程式碼所在目錄
"environment": [],
"externalConsole": true, // 除錯時是否顯示控制檯視窗,一般設定為true顯示控制檯
"MIMode": "gdb",
"miDebuggerPath": "F:\\MinGW\\bin\\gdb.exe", // miDebugger的路徑,注意這裡要與MinGw的路徑對應
"preLaunchTask": "build", // 除錯會話開始前執行的任務,與tasks.json中的label的值一樣
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
//c_cpp_properties.json
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"macFrameworkPath": [
"/System/Library/Frameworks",
"/Library/Frameworks"
]
},
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Win32",
"includePath": [
"${workspaceFolder}"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "F:\\MinGW\\bin\\gcc.exe",
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 3
}