1. 程式人生 > >VSCode 的第一個C++程式(windows)[更新2018.10.28]

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的安裝也沒有什麼特別之處,唯一要注意的地方就是,記住你的安裝路徑,這很重要。

安裝完成之後,開啟軟體,選擇我們需要的包下載。具體看下面的圖片:

test

![image_1cfiv3eqv1j1u1mhivvori1uv3m.png-42.8kB][2]

選擇好了之後,點選 Installation->Apply Chagnes

,在新的視窗中點選Apply
注意:下載過程中可能會失敗,失敗了就再次點選Apply重新下載,還出現失敗,就翻牆吧!
image_1cfivamlj1a9612501qdm171o1c2r13.png-39.2kB

下載完成後,就需要新增系統環境變量了。
我MinGW的安裝目錄在F盤。
image_1cfivl7fog681ela2ac1ug2geo1g.png-50kB

F:\MinGW\bin路徑新增到環境變數中。
image_1cfivn8741gted88tdk1mfe7oj1t.png-36.2kB

然後重啟你的電腦,在cmd中或者Windows PowerShell 中輸入gcc -v驗證一下。下圖是成功的範例。
image_1cfivuv9111m187o1utn19aoo8f2a.png-32.4kB

Get Started

開啟VSCode,我們可以看到它的歡迎介面。

image_1cfj4ohgh10147pe7851nlp15v62n.png-113.6kB

安裝外掛

在VSCode編寫和除錯程式是需要安裝相關的外掛才能進行的。
在這裡我們選擇安裝C/C++C++ IntellisenseCode RunnerInclude Autocomplete這四外掛。
我們點選擴充套件的圖示,在搜尋欄裡搜尋外掛的名稱。

image_1cfj515h6p531k60154sn41fmq34.png-164.6kB

點選安裝,在安裝完成之後,點選重新載入,這個外掛就會生效。

image_1cfj533841n1q1jcm1nbncgug203h.png-168kB

其它的外掛的安裝也是如此。

helloworld

新建一個helloword資料夾,作為我們此次的工作區。在資源管理器中開啟這個資料夾。
開啟這個資料夾後,會發現資料夾沒有原始檔。這時我們需要新建一個helloworld.cpp原始檔。

image_1cfj5gb7p1ekd1jkr18ip15s367k3u.png-103.9kB

這時我們可以編寫helloworld程式了。

image_1cfj5m1131pmv138nab51l5412284b.png-55kB

配置智慧感知

由於資料夾的配置資訊不完整,我們需要自己新增缺少的配置資訊。通過快捷方式Ctrl+Shift+P執行C/CPP: Edit configuration ...命令新增缺少的資訊並生成c_cpp_properties.json檔案。

image_1cfj60kdj167fd621obehhl1pma4o.png-67.8kB

image_1cfj61fbl1026114o1b4qql6pmf55.png-109.7kB

c_cpp_properties.json檔案中找到如下部分(可能與我的不太一樣)
因為我們的系統是windows,所以找win32就能快速的瀏覽到需要配置的區域。
image_1cfj6bhrpuid44p6b4hc9neq5i.png-167kB

更改的最終結果:

image_1cfj6kab71nas1jug1blj10k4n686c.png-113.8kB

"compilerPath": "F:\\MinGW\\bin\\gcc.exe",新增這一條,設定gcc.exe的路徑(根據自己實際gcc.exe路徑新增)。

直觀的效果就是引用標頭檔案出現的綠色波浪線沒了。

構建程式碼

如果你想從VS Code構建你的應用程式,你需要生成一個tasks.json檔案;

開啟命令面板(Ctrl + Shift + P)。選擇Tasks:Configure Tasks ...命令,單擊從模板建立tasks.json檔案,您將看到任務執行模板列表,選擇Others。

image_1cfj77dgvjfo13pc1q698u0onp6p.png-78.3kB

image_1cfj77vfp1l7e1s46vkl1akvcsi76.png-73.7kB

image_1cfj796u31vop881ogem1t1lj78j.png-76.5kB

最終生成tasks.json檔案。

image_1cfj7fp0lgds1rqi16dv12v91vj990.png-81.4kB

將檔案內容修改如下:

image_1cfj7ovkiila1ar517iu1rsa6qa9d.png-92.6kB

我們將當前頁面調整到我們的源程式編輯頁面,點選右上角的小三角形,即可執行我們的程式了。到目前為止,helloworld程式就這樣順利運行了。

image_1cfj7u7hkef91m031ud51p60lcs9q.png-92.1kB

程式的輸出在終端中顯示,如果要在終端向程式輸入資料,那麼還需要進行一點配置。
在命令面板(Ctrl+Shift+P)搜尋使用者配置,在使用者配置檔案中,找到Run Code configuration下的code-runner.runInTerminal的值改為true,更改後的結果在右邊。

image_1cfj8bnnt1p1v1bm31ro21dat1p15a7.png-135.4kB

除錯程式碼

為了能夠除錯,我們還需要生成launch.json檔案。

瀏覽到除錯的視窗,去新增配置。選擇C++(GDB/LIDB),生成launch.json檔案。

image_1cfj8uecs1bpe79q16ou1ond1g7fak.png-74.1kB

image_1cfj8vtth1e9lsoi145gqq71s5tb1.png-42.6kB

image_1cfj92lj21qelfr313mvrq1dabe.png-102.3kB

將launch.json檔案內容更改如下:

image_1cfj9hbr114dm1af81o1j1f8l1091br.png-162.3kB

在進行除錯(F5)的時候,一定要將當前頁面調整到我們的源程式編輯頁面。不然會出錯。

image_1cfj9nlpe14n013qaf5210881cguc8.png-116.2kB

寫在最後

萬事開頭難,其實也不難,只要掌握了方法,一切都不是問題,在寫完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
}