1. 程式人生 > >VS Code編譯C/C++

VS Code編譯C/C++

C/C++環境的配置要比python的複雜許多,好幾個配置檔案要寫。
一、編譯C/C++的環境一般都是整合在我們的編輯器中的,如果電腦上有codeblock和dev c++的讀者可以去安裝路徑下找找MinGW資料夾,可以不用重複下載。而沒有的讀者則需要下載MinGW
這裡寫圖片描述
二、配置環境變數,這裡就不重複截圖了,下面的是python配置環境變數的步驟,而這裡只要找到我們的MinGW資料夾下的bin目錄(我的是D:\MinGW\mingw64\bin),將其新增進去即可。
這裡寫圖片描述
三、開啟VS Code,新增兩個外掛,記得都要重新載入或者重啟VS Code一次
這裡寫圖片描述
四、開啟自己的專案,這裡以Hello World為例。

#include <iostream>
using namespace std;
int main() {
    cout << "Hello World";
    return 0;
}

開啟之後我們發現,標頭檔案出現了綠色的波浪線,這配置C/C++也是常見的問題之一,這是由於找不到標頭檔案導致的
這裡寫圖片描述
我們點選邊上的橙色小燈泡,選擇“Edit ‘includePath’ setting”,之後會建立一個資料夾.vscode(這個資料夾存放了配置檔案),資料夾中有c_cpp_properties.json這個檔案。
這個檔案是json的格式,其中configurations引數下有三個元素,分別是Mac、Linux、Win32,我們根據自己的情況修改相應的配置檔案。下面以Win32為例,找到相應includePath引數。

{
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "intelliSenseMode": "msvc-x64",
            "browse": {
                "path
": [ "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" }
, "cStandard": "c11", "cppStandard": "c++17" }

要新增的內容需要我們開啟我們的cmd,執行gcc -v -E -u c++ -這個命令,找到呼叫g++我們需要用到的檔案路徑,內容很多,我們找到最下面的路徑部分。
這裡寫圖片描述
將這些引數新增到includePath後面,中間用逗號隔開,修改之後如下。細心的讀者會發現上面只有3條記錄,為什麼下面的引數我寫了5條,這是因為當你新增完cmd中輸出的內容之後,儲存配置檔案,檢視自己的C++檔案時,綠色波浪線仍然沒有消失,這裡我們可以再次點選小燈泡,VS Code會繼續補全我們的路徑。之後綠色波浪線消失,說明我們編譯路徑已經配置完成。

{
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}",
                "D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/include",
                "D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/include-fixed",
                "D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/include",
                "D:/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++",
                "D:/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/7.3.0/include/c++/x86_64-w64-mingw32"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "intelliSenseMode": "msvc-x64",
            "browse": {
                "path": [
                    "${workspaceFolder}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            },
            "cStandard": "c11",
            "cppStandard": "c++17"
        }

五、開啟C++檔案,我們按F5或者找到除錯執行,之後將顯示我們沒有launch.json檔案,VS Code會繼續為我們建立一個檔案,我們可以將launch.json檔案的內容刪除,並下面的程式碼完全複製進去。注意:複製進去之後要修改miDebuggerPath引數,這裡面填寫自己的gdb.exe路徑,至此我們的編譯配置已完成。

{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "C++ Launch (GDB)",                 
            "type": "cppdbg",                           
            "request": "launch",                        
            "targetArchitecture": "x86",                
            "program": "${file}.exe",                   
            "miDebuggerPath":"D:\\MinGW\\mingw64\\bin\\gdb.exe", 
            "args": [],     
            "stopAtEntry": false,                       
            "cwd": "${workspaceRoot}",                  
            "externalConsole": true,                    
            "preLaunchTask": "g++"                    
        }
    ]
}

六、Ctrl+Shift+P,輸入Tasks:Configure Task,之後選擇使用模板建立tesks.json檔案
這裡寫圖片描述
同樣覆蓋原始檔,填入下面的內容,用來配置編譯命令

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "command": "g++",
    "args": ["-g","${file}","-o","${file}.exe"],    // 編譯命令
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}

七,按F5即可執行,但是這裡有一個小問題本人還沒有解決,就是console控制檯只閃出來一下,不能觀察到結果,不知道有沒有高人能夠指點一二。