1. 程式人生 > >VScode下安裝C\C++編譯環境

VScode下安裝C\C++編譯環境

下載mingw-w64:https://sourceforge.net/projects/mingw-w64/

安裝C/C++外掛

工作區下新建.vscode資料夾,新建並配置四個.json檔案

C++:

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "MinGW",
            "intelliSenseMode": "clang-x64",
            "compilerPath": "F:/mingw/mingw64/bin/gcc.exe",
            "includePath": [
                "${workspaceFolder}"
            ],
            "defines": [],
            "browse": {
                "path": [
                    "${workspaceFolder}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            },
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

launch.json

// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示
            "type": "cppdbg", // 配置型別,這裡只能為cppdbg
            "request": "launch", // 請求配置型別,可以為launch(啟動)或attach(附加)
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 將要進行除錯的程式的路徑
            "args": [], // 程式除錯時傳遞給程式的命令列引數,一般設為空即可
            "stopAtEntry": false, // 設為true時程式將暫停在程式入口處,我一般設定為true
            "cwd": "${workspaceFolder}", // 除錯程式時的工作目錄
            "environment": [], // (環境變數?)
            "externalConsole": true, // 除錯時是否顯示控制檯視窗,一般設定為true顯示控制檯
            "internalConsoleOptions": "neverOpen", // 如果不設為neverOpen,除錯時會跳到“除錯控制檯”選項卡,你應該不需要對gdb手動輸命令吧?
            "MIMode": "gdb", // 指定連線的偵錯程式,可以為gdb或lldb。但目前lldb在windows下沒有預編譯好的版本。
            "miDebuggerPath": "gdb.exe", // 偵錯程式路徑,Windows下字尾不能省略,Linux下則去掉
            "setupCommands": [ // 用處未知,模板如此
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile" // 除錯會話開始前執行的任務,一般為編譯程式。與tasks.json的label相對應
        }
    ]
}

settings.json

{
    "settings": {
        "files.defaultLanguage": "cpp", // ctrl+N新建檔案後預設的語言
        "editor.formatOnType": true, // 輸入時就進行格式化,預設觸發字元較少,分號可以觸發
        "editor.snippetSuggestions": "top", // snippets程式碼優先顯示補全

        "code-runner.runInTerminal": true, // 設定成false會在“輸出”中輸出,無法輸入
        "code-runner.executorMap": {
            "c": "cd $dir && clang $fileName -o $fileNameWithoutExt.exe -Wall -g -Og -static-libgcc -fcolor-diagnostics --target=x86_64-w64-mingw -std=c11 && $dir$fileNameWithoutExt",
            "cpp": "cd $dir && clang++ $fileName -o $fileNameWithoutExt.exe -Wall -g -Og -static-libgcc -fcolor-diagnostics --target=x86_64-w64-mingw -std=c++17 && $dir$fileNameWithoutExt"
        }, // 設定code runner的命令列
        "code-runner.saveFileBeforeRun": true, // run code前儲存
        "code-runner.preserveFocus": true, // 若為false,run code後游標會聚焦到終端上。如果需要頻繁輸入資料可設為false
        "code-runner.clearPreviousOutput": false, // 每次run code前清空屬於code runner的終端訊息

        "C_Cpp.clang_format_sortIncludes": true, // 格式化時調整include的順序(按字母排序)
        "C_Cpp.intelliSenseEngine": "Default", // 可以為Default或Tag Parser,後者較老,功能較簡單。具體差別參考cpptools擴充套件文件
        "C_Cpp.errorSquiggles": "Disabled", // 因為有clang的lint,所以關掉
        "C_Cpp.autocomplete": "Disabled", // 因為有clang的補全,所以關掉

        "clang.cxxflags": [ // 控制c++靜態檢測時的引數
            "--target=x86_64-w64-mingw",
            "-std=c++17",
            "-Wall"
        ],
        "clang.completion.enable":true // 效果效果比cpptools要好
    }
}

tasks.json

// https://code.visualstudio.com/docs/editor/tasks
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile", // 任務名稱,與launch.json的preLaunchTask相對應
            "command": "g++", // 要使用的編譯器
            "args": [
                "${file}",
                "-o", // 指定輸出檔名,不加該引數則預設輸出a.exe,Linux下預設a.out
                "${fileDirname}/${fileBasenameNoExtension}.exe",
                "-g", // 生成和除錯有關的資訊
                "-Wall", // 開啟額外警告
                "-static-libgcc", // 靜態連結
                "-std=c++17" // C語言最新標準為c11,或根據自己的需要進行修改
            ], // 編譯命令引數
            "type": "shell", // 可以為shell或process,前者相當於先開啟shell再輸入命令,後者是直接執行命令
            "group": {
                "kind": "build",
                "isDefault": true // 設為false可做到一個tasks.json配置多個編譯指令,需要自己修改本檔案,我這裡不多提
            },
            "presentation": {
                "echo": true,
                "reveal": "always", // 在“終端”中顯示編譯資訊的策略,可以為always,silent,never。具體參見VSC的文件
                "focus": false, // 設為true後可以使執行task時焦點聚集在終端,但對編譯c和c++來說,設為true沒有意義
                "panel": "shared" // 不同的檔案的編譯資訊共享一個終端面板
            }
            // "problemMatcher":"$gcc" // 如果你不使用clang,去掉前面的註釋符,並在上一條之後加個逗號。照著我的教程做的不需要改(也可以把這行刪去)
        }
    ]
}

C

c_cpp_properties.json

launch.json

settings.json

tasks.json

參考部落格

https://www.zhihu.com/question/30315894

https://blog.csdn.net/zjwengyidong/article/details/53789533

https://blog.csdn.net/5hongbing/article/details/77620695