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

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

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

1、安裝

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

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

下載安裝便可,安裝時候記得勾選添加到環境變量選項。正則表達式

2、語言

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

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

而後打開下面這個選項Configure Display Language,以下圖windows

打開後而後以下圖編輯器

"en"即爲英語,將其修改成"zh-CN"而後從新啓動VSCode便可。ide

如果沒有成功修改語言,則是沒有下載中文語言包,咱們能夠在擴展中搜索Chinese,安裝第一個擴展再次從新啓動便可。以下圖

 

3、編譯配置

首先咱們先試試如何建立一個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。

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

 

而後就能夠在工做區進行編寫代碼了。

4、其餘

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

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

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

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

相關文章
相關標籤/搜索