1. 程式人生 > >Visual Studio Code安裝以及C/C++運行環境搭建

Visual Studio Code安裝以及C/C++運行環境搭建

代碼 控制臺 重新 gdb c11 nds 合並 技術分享 不難

眾所周知VSCode是全宇宙最好用的編輯器 (霧

配置了很久,今日終於配置完成了,還是有點麻煩的,本文是為了方便一些不懂怎麽配置的小白,以及還有一些美化教程。

一、安裝

Visual Studio Code是一款免費而且強大的編輯器,你可以直接在官方進行下載,本文是針對Windows系統進行安裝使用。

官網:https://code.visualstudio.com/

下載安裝即可,安裝時候記得勾選添加到環境變量選項。

二、語言

新版VSCode的默認語言是英語,我們首先將其更改為中文

按快捷鍵Ctrl+Shift+P打開命令窗口,搜索>lang

然後打開下面這個選項Configure Display Language,如下圖

技術分享圖片

打開後然後如下圖

技術分享圖片

"en"即為英語,將其修改為"zh-CN"然後重新啟動VSCode即可。

若是沒有成功修改語言,則是沒有下載中文語言包,我們可以在擴展中搜索Chinese,安裝第一個擴展再次重新啟動即可。如下圖

技術分享圖片

三、編譯配置

首先我們先試試如何創建一個C++文件,左上角打開文件夾,打開一個文件,註意文件路徑不能有中文,如下圖

技術分享圖片

然後就可以在文件夾內新建文件了。如下圖

技術分享圖片

然後就可以新建一個cpp文件進行編寫,但進行到這裏僅僅只是能夠編寫代碼而已,因為VSCode並不是一個IDE,他只是一個編輯器,所以我們還得自己配置編譯環境,我們首先在擴展商店安裝如下擴展(不是一定要安裝下面的,但是我推薦都安裝一下)。

  • C/C++
  • Code Runner
  • C/C++ Advanced Lint
  • C++ Intellisense
  • C/C++ Clang Command Adapter
  • C/C++ Snippets
  • C++ Algorithm Mnemonics
  • Native Debug

具體每個擴展的功能都在安裝界面有介紹。

然後我們安裝編譯環境,這裏我安裝的是MingGW64+Clang。

  • LLVM Download Page Pre-Built Binaries中的Clang for Windows (64-bit),不需要下.sig文件
  • MinGW-w64 - for 32 and 64 bit Windows

Clang下載好了以後安裝。安裝時選擇Add LLVM to the system PATH for all users。安裝完了以後可能會彈出cmd說MSVC integration install failed。這個是因為Clang默認使用的是msvc的工具鏈,而我們安裝了MinGW,所以就不用管這個提示。

MinGW安裝的時候Architecture選x86_64,裝好以後把東西全部復制到Clang的文件夾裏去,還要自己把MinGW的bin文件夾加到環境變量path中。

打開CMD輸入clang -v如果顯示版本號即安裝完成了。如下圖

技術分享圖片

然後就可以進行編譯了,我們編寫了一個hello.cpp,然後按下面的操作進行編譯運行

技術分享圖片

運行成功,此時我們以及可以通過VSCode進行C/C++代碼編寫以及運行。

後面我們可以配置幾個.json文件修改一些編譯參數。

先創建一個你打算存放代碼的文件夾(稱作工作區),路徑不能含有中文和空格。然後打開VS Code,選打開文件夾,選擇剛才那個文件夾,點VS Code上的新建文件夾,名稱為.vscode,然後創建 launch.json,tasks.json,settings.json,c_cpp_properties.json放到.vscode文件夾下,註意在VSCode進行創建.vscode文件夾,至於為什麽你可以試試直接在文件中創建(Windows不支持文件夾開頭為.)。

如下圖

技術分享圖片

launch.json代碼:

該文件除stopAtEntry可根據自己喜好修改外,無需更改。除非你不用windows,則可以用llvm調試

技術分享圖片
// 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": "${workspaceRoot}", // 調試程序時的工作目錄
            "environment": [], // (環境變量?)
            "externalConsole": true, // 調試時是否顯示控制臺窗口,一般設置為true顯示控制臺
            "MIMode": "gdb", // 指定連接的調試器,可以為gdb或lldb。但目前lldb在windows下沒有預編譯好的版本。
            "miDebuggerPath": "gdb.exe", // 調試器路徑。
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile" // 調試會話開始前執行的任務,一般為編譯程序。與tasks.json的taskName相對應
        }
    ]
}
View Code

tasks.json代碼:

該文件reveal可根據自己喜好修改,-std根據自己的情況修改。如果不想要額外警告,把-Wall那一條刪去。

如果使用Clang編譯C語言,把command的值改成clang。

如果使用MinGW,編譯C用gcc,編譯c++用g++,並把-target和-fcolor那兩條刪去。

技術分享圖片
// https://code.visualstudio.com/docs/editor/tasks
{
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "Compile", // 任務名稱,與launch.json的preLaunchTask相對應
            "command": "clang++", // 如果用MinGW,編譯C用gcc,編譯c++用g++
            "args": [
                "${file}",
                "-o", // 指定輸出文件名,不加該參數則默認輸出a.exe
                "${fileDirname}/${fileBasenameNoExtension}.exe",
                "-g", // 生成和調試有關的信息
                "-Og",
                "-Wall", // 開啟額外警告
                "-static-libgcc", // 靜態鏈接
                "-fcolor-diagnostics",
                "--target=x86_64-w64-mingw", // 默認target為msvc,不加這一條就會找不到頭文件
                "-std=c++1z" // c++1z即c++17,C語言最新標準為c11,或根據自己的需要進行修改
            ], // 編譯命令參數
            "type": "shell",
            "group": {
                "kind": "build",
                "isDefault": true // 設為false可做到一個tasks.json配置多個編譯指令,需要自己修改本文件,我這裏不多提
            },
            "presentation": {
                "echo": true,
                "reveal": "silent", // 設置是否在“終端”中顯示編譯信息,可以為always,silent,never。一些錯誤提示也在這裏,但是因為有靜態檢測,我就設為silent了。
                "focus": false,
                "panel": "shared" // 不同的文件的編譯信息共享一個終端面板
            },
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": [
                    "relative",
                    "/"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", // 正則表達式,用於描述在“問題”欄中顯示的信息。
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            } // 1.11.0的更新日誌裏說可以直接寫"problemMatcher": "$gcc",但是我試了一下不行。
        }
    ]
}
View Code

settings.json代碼:

如果你沒有合並Clang和MinGW,則該文件中頭文件的路徑必需修改成MinGW的路徑,否則Lint無效。版本號(這裏是7和7.1.0)如果不同,也要修改。輸gcc -v可以看到)

Windows下的路徑為反斜杠,原本應使用兩個反斜杠來轉義,但直接用斜杠在VS Code中也接受

技術分享圖片
// 將設置放入此文件中以覆蓋默認值和用戶設置。
{
    "files.defaultLanguage": "c", // ctrl+N新建文件後默認的語言
    "c-cpp-flylint.cppcheck.enable": false,
    "c-cpp-flylint.flexelint.enable": false,
    "c-cpp-flylint.run": "onType", // 此選項貌似不起作用
    "c-cpp-flylint.clang.includePaths": [
        "${workspaceRoot}",
        "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++",
        "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/x86_64-w64-mingw32",
        "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/backward",
        "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include",
        "C:/llvm/include",
        "C:/llvm/x86_64-w64-mingw32/include",
        "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed"
    ],
    "c-cpp-flylint.clang.defines": [
        "_DEBUG",
        "UNICODE",
        "__GNUC__=7",
        "__cdecl=__attribute__((__cdecl__))"
    ],
    "c-cpp-flylint.standard": [
        "c11", // 如果你想要使用c89,就自己改
        "c++1z" // c++1z即c++17
    ],
    "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++1z && $dir$fileNameWithoutExt"
    },
    "code-runner.saveFileBeforeRun": true,
    "C_Cpp.clang_format_sortIncludes": true,
    "C_Cpp.errorSquiggles": "Disabled"
}
View Code

c_cpp_properties.json代碼:

如果你沒有合並Clang和MinGW,則該文件中頭文件的路徑必需修改成MinGW的路徑,否則IntelliSense無效。版本號如果不同,也要修改。

技術分享圖片
{
    "configurations": [
        {
            "name": "Win32",
            "intelliSenseMode": "clang-x64",
            "includePath": [
                "${workspaceRoot}",
                "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++",
                "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/x86_64-w64-mingw32",
                "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/backward",
                "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include",
                "C:/llvm/include",
                "C:/llvm/x86_64-w64-mingw32/include",
                "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "__GNUC__=7",
                "__cdecl=__attribute__((__cdecl__))"
            ],
            "browse": {
                "path": [
                    "C:/llvm/x86_64-w64-mingw32/include",
                    "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include",
                    "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed",
                    "C:/llvm/include/*",
                    "${workspaceRoot}"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 2
}
View Code

然後就可以在工作區進行編寫代碼了。

四、其他

關於.exe,這樣編寫下來肯定會有很多.exe文件,會占空間,雖然可能占不了多少空間,但更重要的是會和代碼夾雜在一起,非常不方便查找代碼,我提供下面兩個方法快速刪除.exe文件

第一種方法是把生成的文件的目錄指定到一個特定的目錄,裏面都放的是exe。修改一下json文件不難做到。

第二種方法是在cmd下輸一條刪除該目錄及子目錄下所有exe的命令:del /q /s *.exe,不過小心不要把路徑寫錯了

第三種方法,到工作區的目錄下搜索*.exe就都出來了。

Visual Studio Code安裝以及C/C++運行環境搭建