第八章 vscode配置c/c++開發環境 目錄 前言 配置過程 注意事項

目錄

第一章 初次接觸vscode
第二章 vscode快捷鍵的使用
第三章 vscode的界面配置
第四章 vscode作爲Markdown編輯器
第五章 vscode進行git管理
第六章 vscode的遷移
第七章 vscode配置go語言開發環境
第八章 vscode配置c/c++開發環境

前言

平時工作用到的是c編程, 當都是在linux下編譯, 在windows下編譯的情況很少, 但是也是有的, 比如我們做的windows下的分析工具, 也是用c語言寫的, 需要在windows下編譯, 最早使用的是VC++ 6.0, 軟件經典但很老久, 一些功能也不是很方便, 後來換了code block, 挺不錯的, 這不最近習慣了vscode, 就想着看是否可以用vscode進行windows下的c開發, 在上網搜索一番後開始了自己的配置.

配置過程

  1. 因爲是剛開始學習配置, 爲了簡便, 就自己新建一個簡單點的c工程, 以免到時候有錯誤都不知道是代碼本身的問題還是配置的問題.
  2. 簡單工程能夠編譯的話說明配置上是可行的, 然後再進行復雜工程的編譯.
  3. 還是以經典的'helloworld'開始, 首先自己創建一個helloworld目錄, 然後新建一個helloworld.c文件, 敲入以下代碼
#include <stdio.h>
int main()
{
    printf("hello world.\n");
}
  1. 到這裏一個helloworld的工程就建好了, 後面就看怎麼編譯了, 我們把helloworld.c編譯成helloworld.exe來運行.
  2. 說一下要用到的工具. c/c++插件, 可以在插件管理中搜索安裝; mingw64(注意安裝路徑不要有空格), 這是編譯調試工具(至於mingw64, mingw, sygwin的選擇和區別, 可以參考這裏)., 注意mingw64裝好之後要配置環境變量哈, 安裝配置方法網上很多, 這裏提供一處做參考(https://www.cnblogs.com/bpf-1024/p/11597000.html).
  3. 在開始編譯之前, 我們先來了解一點東西, 那就是vscode編譯時要用到的兩個文件'launch.json'和'task.json', 在官方說明裏, 還有一個'c_cpp_properties.json'文件, 這裏說一下它們各自的作用.

tasks.json (build instructions)
這個文件定義了編譯的方法, 比如用哪個編譯器, 編譯時候的參數是啥, 目標文件等.
launch.json (debugger settings)
這是調試的配置, 在vscode裏F5可以進行調試, 這裏面指明用哪個調試器進行調試, 調試的是哪個程序, 也就是運行哪個task(和上面的task對應)
c_cpp_properties.json (compiler path and IntelliSense settings)
看官方說明這是配置編譯器路徑的, 但是在task.json中command參數就可以指定路徑啊, 是不是之前沒有command這個參數, 現在有這個參數了就用不到c_cpp_properties.json這個文件了呢(參考這裏推測的). 沒有細究這個問題, 反正我目前是沒有用到這個文件.

  1. 好了, 瞭解了各個文件的作用之後, 現在就要開始配置這些文件了. 我們先看看編譯過程是否可以, 先不調試. 也就是隻配置task.json, 先不管launch.json.
    依次選擇菜單"終端->配置默認生成任務", 然後選擇"g++.exe build active file"生成一個默認的task.json文件, 可以發現它是在.vscode目錄下的. 我們配置一下這個文件, 見如下注釋:
{
    // 有關 tasks.json 格式的文檔,請參見
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "mybuild",  #給你的任務起一個名字
            "command": "D:\\mingw64\\bin\\g++.exe",  #這裏指定你的編譯器
            # args是一些編譯參數的配置
            "args": [   
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "D:\\mingw64\\bin"  #和上面編譯器路徑對應
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

瞭解一下官方的說明:

The command setting specifies the program to run; in this case that is g++. The args array specifies the command-line arguments that will be passed to g++. These arguments must be specified in the order expected by the compiler. This task tells g++ to take the active file ({file}), compile it, and create an executable file in the current directory ({fileDirname}) with the same name as the active file but with the .exe extension (${fileBasenameNoExtension}.exe), resulting in helloworld.exe for our example.

  1. task.json配置好了, 我們就可以運行它了, 選擇菜單"終端->運行任務", 根據配置, vscode會調用你指定的g++編譯器, 然後根據你配置的編譯參數對helloworld.c進行編譯, 生成你指定的目標文件helloworld.exe.
    輸出信息如下:


你可以使用" .\helloworld.exe"來運行程序, 此時會打印"hello world"字符串.

  1. 如果要調試程序, 需要告訴vscode用哪個工具來調試, 這是就需要配置launch.json了, 按F5或者"調試->啓動調試", 然後選擇"C++ (GDB/LLDB)"生成默認的launch.json, 修改內容如下:
{
    // 使用 IntelliSense 瞭解相關屬性。 
    // 懸停以查看現有屬性的描述。
    // 欲瞭解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 啓動",
            "type": "cppdbg",
            "request": "launch",
            # 指定調試的程序, 就是task生成的目標文件, 這裏是helloworld.exe
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,   # 修改這裏可以彈出調試窗口
            "MIMode": "gdb",
            # 指定你調試用的工具
            "miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "爲 gdb 啓用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

看官方說明還有這個參數"preLaunchTask": "g++.exe build active file", 但我的vscode生產的文件並沒有這個參數, 這個參數的作用是說, 在執行launch之前需要執行的任務, 比如前面我們配置的task是編譯用的, 這裏配置的launch是調試用的, 但通常我們調試時希望程序自動編譯新修改的代碼然後再開始調試, 這是就要用到"preLaunchTask"這個配置了, 把它配置成你前面task的名字, 那麼在你每次調試前, 它都行先執行前面的task然後再開始調試.

注意事項

  1. 看官方說明, 安裝mingw64的時候, 注意不要讓路徑中包含空格.
  2. 注意編譯和調試的時候, 你的默認終端應該是powershell等windows終端, 像我開始用的wsl就會報錯. 因爲我們是在windows下工作的.
  3. 編譯或者調試要回到helloworld.c再進行.

>>>>>>>>>>>>>>>>>>
補充:
這裏補充一點關於code runner的說明. code runner是一款代碼調試插件, 和上面的功能差不多, 它其實也是有一些配置的, 要告訴他如何去編譯, 編譯時帶哪些參數.
這個是在code-runner.executorMap這一項配置的, 可以在設置中搜索, 然後在setting.json中修改, 在插件的說明文檔中有舉例, 比如c語言的編譯方法爲"c": "cd dir && gccfileName -o fileNameWithoutExt &&dir$fileNameWithoutExt", 這其實和上面的編譯很相似.
再就是對於中文, 默認的編譯方式可能會顯示亂碼, 可以通過在gcc或g++後面添加-fexec-charset=GBK 參數來解決. 上面的方法也是.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章