使用 VSCode 編譯並執行 C/C++ 語言

Visual Studio Code (簡稱 VSCode) 是一款由微軟開發的開源文字編輯器,算是近年來文字編輯器的新起之秀,越來越多人喜歡以 VSCode 做為開發的工具,擁有優良的擴充功能的市場,使得 VSCode 變的無限可能,雖然無法自動編譯程式,不過依然可以使用豐富的外掛及設定,打造一個適合自己的開發平台,這篇教學主要要來教大家如何使用 VSCode 來設定 C/C++ 的開發環境。如果已經有其他習慣使用的 IDE 也不妨試試,相信 VSCode 的高顏值,一定會讓你愛不釋手!

下載並安裝所需元件

Step 1. 下載最新版的 MinGW-w64

Step 2. 將下載好的 MinGW-w64 安裝,並將Architecture 更改為 x86_64,其餘不須更動,安裝路徑用預設的即可。

Step 3. 至 LLVM Download Page 下載 Pre-Built Binaries 版本的 LLVM,選擇Windows(64-bit)即可,無須下載(.sig)檔案。

Step 4. 安裝下載好的 LLVM ,並選擇第二個選項 “Add LLVM to the system PATH for all users”,來自動將LLVM 路徑加到環境變數中。

Step 5. 建議安裝路徑更改為 C:\LLVM,安裝在其他地方也行,只不過後面的路徑設定就必須要自行更改。

合併檔案

Step 6. 分別打開 MinGW-w64 以及 LLVM 的安裝位置,依照剛剛的安裝狀態,分別會位於 “C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64” 以及 “C:\LLVM”。接著將 mingw64 資料夾的檔案全部複製至 LLVM 資料夾中。

VSCode 擴充外掛安裝

Step 7. 打開 VSCode 安裝所需的擴充功能外掛。

  • C/C++ (C/C++ 語言的支援)
  • C/C++ Clang Command Adapter (使用Clang命令完成 C / C ++)
  • Code Runner (運行程式文件)

編譯環境設定

Step 8. 建立一個專案資料夾,可以自行命名,本教學將專案資料夾命名為 “C-projects”,往後的 C/C++ 專案都會存放於此,並使用 VSCode 將專案資料夾打開。

Step 9. 在專案資料夾 (C-Projects) 下新增一個名為”.vscode”的資料夾,並在此資料夾另外加入四個空白 .json檔案,分別為 “c_cpp_properties.json”、”launch.json”、”settings.json” 以及 “tasks.json”。

Step 10. 使用 VSCode 編輯這四個檔案,分別加入一些設定值。

c_cpp_properties.json

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

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(gdb) Launch", 
      "type": "cppdbg", 
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}.exe", 
      "args": [], 
      "stopAtEntry": true,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true, 
      "internalConsoleOptions": "neverOpen",
      "MIMode": "gdb",
      "miDebuggerPath": "gdb.exe", 
      "setupCommands": [ 
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": false
        }
      ],
      "preLaunchTask": "Compile" 
    }
  ]
}

settings.json


{
  "files.defaultLanguage": "cpp", 
  "editor.formatOnType": true, 
  "editor.snippetSuggestions": "top",
  "code-runner.runInTerminal": true,
  "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.saveFileBeforeRun": true, 
  "code-runner.preserveFocus": true, 
  "code-runner.clearPreviousOutput": false, 
  "C_Cpp.clang_format_sortIncludes": true,
  "C_Cpp.intelliSenseEngine": "Default", 
  "C_Cpp.errorSquiggles": "Disabled", 
  "C_Cpp.autocomplete": "Disabled",
  "clang.cflags": [
    "--target=x86_64-w64-mingw",
    "-std=c11",
    "-Wall"
  ],
  "clang.cxxflags": [ 
    "--target=x86_64-w64-mingw",
    "-std=c++17",
    "-Wall"
  ],
  "clang.completion.enable": true 
}

tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Compile", 
      "command": "clang++", 
      "args": [
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}.exe",
        "-g", 
        "-Wall",
        "-static-libgcc",
        "-fcolor-diagnostics",
        "--target=x86_64-w64-mingw", 
        "-std=c++17" 
      ], 
      "type": "shell", 
      "group": {
        "kind": "build",
        "isDefault": true 
      },
      "presentation": {
        "echo": true,
        "reveal": "always", 
        "focus": false, 
        "panel": "shared" 
      }
      // "problemMatcher":"$gcc" 
    }
  ]
}

大功告成,開始開發囉

到這裡,我們就已經將編譯環境設定好了,可以試著在專案資料夾中建立一個C/C++ 檔案,必須注意,每次建立專案時必定要置於專案資料夾(C-projects)下,才能正常運行,執行偵錯,如下圖程式少了一個分號, 可以發現如果有語法錯誤,底下的”問題”就會跳出錯誤訊息。

我們可以使用快捷鍵 Ctrl + Shift +B 來快速將程式編譯,產生同檔名的 .exe 執行檔。

也可以在程式畫面上點擊滑鼠右鍵,選擇 Run Code 或是快捷鍵 Ctrl + Alt + N,在底下的終端機中運行程式。

5 則留言

  1. 您好:
    我照著您的步做做但不行
    我ctrl+shift+B出現錯誤

    clang++ : 無法辨識 ‘clang++’ 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。請檢查名稱拼字是
    否正確,如果包含路徑的話,請確認路徑是否正確,然後再試一次。
    位於 線路:1 字元:1
    + clang++ ‘c:\test c\test.c’ -o ‘c:\test c/test.exe’ -g -Wall -static-l …
    + ~~~~~~~
    + CategoryInfo : ObjectNotFound: (clang++:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    都照著您的方式做了就沒產出exe檔

  2. 您好 我在照著您的步驟一步步進行後
    最後打了和您一樣的程式碼再右鍵點擊RUN CODE 並沒有成功
    他自終端機跳出了以下訊息
    PS D:\vscode\C-PROJECTS> cd “d:\vscode\C-PROJECTS\” ; if ($?) { clang Hello World.c -o Hello World.exe -Wall -g -Og -static-libgcc -fcolor-diagnostics –target=x86_64-w64-mingw -std=c11 } ; if ($?) { .\Hello
    World }
    clang: error: no such file or directory: ‘Hello’
    clang: error: no such file or directory: ‘World.c’
    clang: error: no such file or directory: ‘World.exe’
    clang: error: no input files
    PS D:\vscode\C-PROJECTS>
    請問大大能協助嗎

  3. 你好 有闗vscode 在操作時要多列加註”#” 使用ctl+/ 時 有時候可以.但大部份[戋無法使用出現…,請問要如何設定 謝謝謝

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *