為 VSCode 配置 C 語言編譯環(huán)境

1. 前提條件

安裝 VSCode 以及 MinGW

安裝好 VSCode 中的 C/C++ 擴(kuò)展
[圖片上傳失敗...(image-e93c7c-1606314000230)]

PS: 我建議使用 chocolatey 安裝,這樣可以自動配置好環(huán)境變量

運行下列命令檢查是否已經(jīng)配置好環(huán)境變量:

gcc --version
gdb --version

2. 配置 VSCode

2.1. 創(chuàng)建工作文件夾

打開 Windows 的 Command Prompt,運行下列命令:(建立一個叫 project 的文件夾,里面將會放置你的程序文件,然后建立一個叫 helloworld 的子文件夾,進(jìn)到子文件夾,打開 VSCode )

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

最后的 code . 命令會在當(dāng)前文件夾打開 VSCode ,當(dāng)前文件夾隨即變成當(dāng)前的 workspace

2.2. 創(chuàng)建C語言的源代碼文件

點擊創(chuàng)建新文件,命名為 helloworld.c

image

在源代碼文件內(nèi)輸入:

#include <stdio.h>

int main() {
    printf("Hello World!\n");
    
    return 0;
}

保存源代碼文件

2.3. 編譯C語言的源代碼

這一步我們需要創(chuàng)建一個 tasks.json 文件來告訴VSCode如何編譯C語言的源代碼。

在菜單中選擇 Terminal > Configure Default Build Task 。隨后會出現(xiàn)一個下拉菜單,里面會有 VSCode 預(yù)設(shè)的一些編譯選項。我們這里選擇 gcc.exe 這一項。

image

選中之后,VSCode 在當(dāng)前工作文件夾下面的一個 .vscode 的文件夾中自動創(chuàng)建了一個 tasks.json 文件,文件內(nèi)容看起來可能是這樣的:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe build active file",
            "command": "C:\\ProgramData\\chocolatey\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "C:\\ProgramData\\chocolatey\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "compiler: C:\\ProgramData\\chocolatey\\bin\\gcc.exe"
        }
    ]
}

其中 commend 選項給出了具體執(zhí)行編譯任務(wù)的程序文件,在這里就是我們剛才選擇的 gcc.exe 。args 選項給出的是運行編譯任務(wù)時傳遞給 gcc 的參數(shù)。

具體內(nèi)容可以參考 Visual Studio Code Variables Reference

創(chuàng)建好 tasks.json 之后,我們可以進(jìn)行編譯了。在菜單中選擇 Terminal > Run Build Task

如果編譯成功,你應(yīng)該可以看到一個與源代碼同名的 exe 可執(zhí)行文件

2.4. 調(diào)試C語言的源代碼

這一步我們需要創(chuàng)建一個 launch.json 文件來告訴 VSCode 如何編譯 C 語言的源代碼,即按下 F5 時啟動 GDB 調(diào)試器。

在菜單中選擇 Run > Add Configuration ,然后選擇 C++ (GDB/LLDB) 。隨后會出現(xiàn)一個下拉菜單,里面會有一些預(yù)設(shè)的調(diào)試配置。我們這里選擇 gcc.exe 這一項。

VSCode 就會自動創(chuàng)建一個 launch.json 文件,同時編譯并運行調(diào)試當(dāng)前的 helloworld

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": "gcc.exe - 生成和調(diào)試活動文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\ProgramData\\chocolatey\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "為 gdb 啟用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc.exe build active file"
        }
    ]
}

其中 program 指定要進(jìn)行調(diào)試的程序。

默認(rèn)情況下,源代碼中不會自動設(shè)置斷點,我們可以把 stopAtEntry 的值改成 true ,這樣在調(diào)試的時候,即便沒有添加任何斷點,調(diào)試也會停止在 main 函數(shù)的入口。

注意:preLaunchTask 指定調(diào)試之前需要執(zhí)行的任務(wù),需要確保其與 task.json 中的 label 的值一致。

2.5. 其他配置

如果希望調(diào)控更多的參數(shù),我們可以創(chuàng)建一個 c_cpp_properties.json 文件,其中可以修改編譯器的路徑、頭文件 (include) 的路徑以及編譯器使用的標(biāo)準(zhǔn)(如c99)等參數(shù)。

可以在 Command Palette (Ctrl+Shift+P) 中運行 C/C++: Edit Configurations (UI) 來查看這些參數(shù),如果對參數(shù)進(jìn)行了修改,VSCode 會把這些修改寫入 c_cpp_properties.json 文件中。

image

這里我們把 C 語言的標(biāo)準(zhǔn)改為 c11 ,也可以不修改。

參考鏈接
  1. Get Started with C++ and Mingw-w64 in Visual Studio Code
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容