web-dev-qa-db-ja.com

C++コードをコンパイルするためのVisual Studioコードの設定方法

Microsoftの Visual Studio Code editorは非常にいいですが、C++プロジェクトを構築するためのデフォルトのサポートはありません。

これを行うためにどのように設定すればいいですか?

160
user3703887

ビルドタスクはプロジェクト固有です。新しいプロジェクトを作成するには、Visual Studio Codeでディレクトリを開きます。

ここ の指示に従って、を押します。 Ctrl + Shift + PConfigure Tasksと入力して選択し、を押します。 Enter

Tasks.jsonファイルが開きます。次のビルドスクリプトをファイルに貼り付けて保存します。

{
    "version": "0.1.0",
    "command": "make",
    "isShellCommand": true,
    "tasks": [
        {
            "taskName": "Makefile",

            // Make this the default build command.
            "isBuildCommand": true,

            // Show the output window only if unrecognized errors occur.
            "showOutput": "always",

            // Pass 'all' as the build target
            "args": ["all"],

            // Use the standard less compilation problem matcher.
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": ["relative", "${workspaceRoot}"],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        }
    ]
}

メニューに行きますファイル設定キーボードショートカットをクリックし、ビルドタスクに次のキー割り当てを追加します。

// Place your key bindings in this file to overwrite the defaults
[
    { "key": "f8",          "command": "workbench.action.tasks.build" }
]

今押すと F8 Makefileが実行され、エラーがエディタで強調表示されます。

76
user3703887

C++コードをコンパイルおよび実行するためのはるかに簡単な方法があります。構成は不要です。

  1. Code Runner Extensionをインストールします
  2. テキストエディタでC++コードファイルを開き、ショートカットCtrl+Alt+Nを使用するか、F1を押してRun Codeを入力するか、テキストエディタを右クリックしてRun Codeを右クリックし、コードをコンパイルして実行します。出力ウィンドウに表示されます。

さらに、望むように異なるC++コンパイラを使ってsettings.jsonの設定を更新することができます。C++のデフォルト設定は以下の通りです:

"code-runner.executorMap": {
    "cpp": "g++ $fullFileName && ./a.out"
}
89
Jun Han

新しい2.0.0 tasks.jsonバージョン用のmakefileタスクの例。

いくつかのコメントの下のスニペットで、私はそれらが役に立つことを願っています。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "<TASK_NAME>",
            "type": "Shell",
            "command": "make",
            // use options.cwd property if the Makefile is not in the project root ${workspaceRoot} dir
            "options": {
                "cwd": "${workspaceRoot}/<DIR_WITH_MAKEFILE>"
            },
            // start the build without prompting for task selection, use "group": "build" otherwise
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            },
            // arg passing example: in this case is executed make QUIET=0
            "args": ["QUIET=0"],
            // Use the standard less compilation problem matcher.
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": ["absolute"],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        }
    ]
}
35
attdona

VSをC++用に設定する方法は次のとおりです。

launch.json

{
   "version": "0.2.0",
   "configurations": [
       {
           "name": "C++ Launch (GDB)",                
           "type": "cppdbg",                         
           "request": "launch",                        
           "targetArchitecture": "x86",                
           "program": "${workspaceRoot}\\${fileBasename}.exe",                 
           "miDebuggerPath":"C:\\mingw-w64\\bin\\gdb.exe", 
           "args": [],     
           "stopAtEntry": false,                  
           "cwd": "${workspaceRoot}",                  
           "externalConsole": true,                  
           "preLaunchTask": "g++"                    
           }
   ]
}

tasks.json

{
    "version": "0.1.0",
    "command": "g++",
    "args": ["-g","-std=c++11","${file}","-o","${workspaceRoot}\\${fileBasename}.exe"],
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceRoot}",
                "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++",
                "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/x86_64-w64-mingw32",
                "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/backward",
                "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include",
                "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/tr1",
                "C:/mingw-w64/x86_64-w64-mingw32/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "__GNUC__=6",
                "__cdecl=__attribute__((__cdecl__))"
            ],
            "intelliSenseMode": "msvc-x64",
            "browse": {
                "path": [
                    "${workspaceRoot}",
                    "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++",
                    "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/x86_64-w64-mingw32",
                    "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/backward",
                    "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include",
                    "C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/tr1",
                    "C:/mingw-w64/x86_64-w64-mingw32/include"
                ]
            },
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        }
    ],
    "version": 3
}

参照:

  1. C/C++ for VSコード

  2. c_cpp_properties.jsonテンプレート

8
Li Kui

明確なドキュメントがないというフラストレーションから、私はgithub上でうまく動作するはずのMacプロジェクトを作成しました(ビルドとデバッグの両方)。

vscode-mac-c-example

XCodeとVSCode Microsoft cpptools拡張が必要です。

私はWindowsとlinuxのために同じことをするつもりです(マイクロソフトがまともな文書を最初に書かない限り)。

6
peegee123

G ++コンパイラを使用してVSをC++用に設定した方法は次のとおりです。デバッグオプションも含めて、うまく機能します。

tasks.jsonファイル

{
    "version": "0.1.0",
    "command": "g++",
    "isShellCommand": true,
    // compiles and links with debugger information
    "args": ["-g", "-o", "hello.exe", "hello.cpp"],
    // without debugger information
    // "args": ["-o", "hello.exe", "hello.cpp"],
    "showOutput": "always"
}

launch.jsonファイル

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Launch (Windows)",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/hello.exe",
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\MinGw\\bin\\gdb.exe",
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "externalConsole": false,
            "visualizerFile": "${workspaceRoot}/my.natvis"
        }
    ]
}

VS Codeに 'C/C++ for Visual Studioコード'拡張機能がインストールされています。

5
Vlad Bezden

あなたのプロジェクトがCMake設定を持っているなら、VSCodeを設定するのはかなり簡単です。 tasks.jsonを以下のように設定します。

{
    "version": "0.1.0",
    "command": "sh",
    "isShellCommand": true,
    "args": ["-c"],
    "showOutput": "always",
    "suppressTaskName": true,
    "options": {
        "cwd": "${workspaceRoot}/build"
    },
    "tasks": [
        {
            "taskName": "cmake",
            "args": ["cmake ."]
        },
        {
            "taskName": "make",
            "args" : ["make"],
            "isBuildCommand": true,
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": "absolute",
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        }
    ]
}

これは、CMake設定のあるワークスペースのルートにフォルダbuildがあると仮定しています。

CMake統合拡張機能 もあり、これはVScodeに "CMake build"コマンドを追加します。

PS! problemMatcherclang- build用に設定されています。 GCCを使用するには、fileLocationrelativeに変更する必要があると思いますが、これはテストしていません。

5
larsmoa

更新されたVSコードを使用すると、次の方法でそれを行うことができます。

  1. ヒット(Ctrl+P)とタイプ:

    ext install cpptools
    
  2. フォルダを開く(Ctrl+K & Ctrl+O)フォルダ内に拡張子。cpp(例:hello.cpp)を付けて新しいファイルを作成します。

  3. コードを入力して[保存]をクリックします。

  4. ヒット(Ctrl+Shift+P Configure task runnerと入力して、リストの下部にあるotherを選択します。

  5. 同じフォルダーにbuild.batという名前でバッチファイルを作成し、ファイルの本文に次のコードを含めます。

    @echo off
    call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64     
    set compilerflags=/Od /Zi /EHsc
    set linkerflags=/OUT:hello.exe
    cl.exe %compilerflags% hello.cpp /link %linkerflags%
    
  6. 次のようにtask.jsonファイルを編集して、保存します

    {
    // See https://go.Microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "build.bat",
    "isShellCommand": true,
    //"args": ["Hello World"],
    "showOutput": "always"
    }
    
  7. ヒット(Ctrl+Shift+B ビルドタスクを実行します。これにより、プロジェクト用に。objおよび。exeファイルが作成されます。

  8. プロジェクトをデバッグするために、Hit F5 そしてC++(Windows)を選択します。

  9. launch.jsonファイルで、次の行を編集し、saveファイルを編集します。

    "program": "${workspaceRoot}/hello.exe",
    
  10. ヒット F5

4
Poornamith

マイクロソフトからのC/C++言語拡張があります。あなたはそれをインストールすることができます。Ctrl+p)と入力:

ext install cpptools

あなたはそれについてここで読むことができます:

https://blogs.msdn.Microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/

2016年5月現在、非常に基本的なものです。

3
Eliot

Visual Studio Codeのバージョン2.0.0タスクを持つこの最新のGistを参照することができます。 https://Gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454

タスクを更新せずに各ファイルを簡単にコンパイルして実行できます。これは一般的なもので、入力エントリ用の端末も開きます。

2
Akansh Gulati

ここでの基本的な問題は、C++プログラムの構築とリンクが、使用中の構築システムに大きく依存するということです。プラグインとカスタムコードのいくつかの組み合わせを使用して、以下の異なるタスクをサポートする必要があります。

  1. エディタの一般的なC++言語サポート。これは通常ms-vscode.cpptoolsを使用して行われます。これはほとんどの人がビルドサポートのような他の多くのものも扱うことを期待しています。時間を節約しましょう。そうではありません。しかし、とにかくあなたはそれがほしいと思うでしょう。

  2. タスクを構築、クリーンアップ、および再構築します。ここがあなたのビルドシステムの選択が大きな問題になるところです。 CMakeやAutoconfなどのプラグインは見つかりますが、MesonやNinjaなどを使用している場合は、ヘルパースクリプトを作成し、カスタムの "tasks.json"ファイルを次のように設定する必要があります。これらを処理してください。 Microsoftは、このファイルに関するすべてのことを最近のいくつかのバージョンで完全に変更しました。それが呼び出されることになっている場所とその場所(はい、場所S)に至るまでです。さらに悪いことに、彼らはSORT OFが後方互換性を保っているので、あなたが望むどの変種を指定するために必ず "version"キーを使うべきです。詳細はこちら:

https://code.visualstudio.com/docs/editor/tasks

...しかし以下と矛盾することに注意してください。

https://code.visualstudio.com/docs/languages/cpp

警告:以下のすべての回答において、 "VERSION"タグが付いているものはすべて2.0.0 IS OBSOLETEではありません。

これが私が今持っている最も近いものです。スクリプトに集中することの大部分はキックオフしています。これは私が共存できるメニューエントリを実際に提供するものではありません。ここに。以上のことを踏まえて、現時点で私の.vscode/tasks.jsonファイルとして許容できるものは次のとおりです。

{
// See https://go.Microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
    {
        "label": "build project",
        "type": "Shell",
        "command": "buildscripts/build-debug.sh",
        "args": [],

        "group": {
            "kind": "build",
            "isDefault": true
        },
        "presentation": {
            // Reveal the output only if unrecognized errors occur.
            "echo": true,
            "focus": false,
            "reveal": "always",
            "panel": "shared"
        },

        // Use the standard MS compiler pattern to detect errors, warnings and infos
        "options": {
            "cwd": "${workspaceRoot}"
        },
        "problemMatcher": {
            "owner": "cpp",
            "fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
            "pattern": {
                "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                "file": 1,
                "line": 2,
                "column": 3,
                "severity": 4,
                "message": 5
            }
        }
    },
    {
        "label": "rebuild project",
        "type": "Shell",
        "command": "buildscripts/rebuild-debug.sh",
        "args": [],
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "presentation": {
            // Reveal the output only if unrecognized errors occur.
            "echo": true,
            "focus": false,
            "reveal": "always",
            "panel": "shared"
        },

        // Use the standard MS compiler pattern to detect errors, warnings and infos
        "options": {
            "cwd": "${workspaceRoot}"
        },
        "problemMatcher": {
            "owner": "cpp",
            "fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
            "pattern": {
                "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                "file": 1,
                "line": 2,
                "column": 3,
                "severity": 4,
                "message": 5
            }
        }
    },
    {
        "label": "clean project",
        "type": "Shell",
        "command": "buildscripts/clean-debug.sh",
        "args": [],

        "group": {
            "kind": "build",
            "isDefault": true
        },
        "presentation": {
            // Reveal the output only if unrecognized errors occur.
            "echo": true,
            "focus": false,
            "reveal": "always",
            "panel": "shared"
        },

        // Use the standard MS compiler pattern to detect errors, warnings and infos
        "options": {
            "cwd": "${workspaceRoot}"
        },
        "problemMatcher": {
            "owner": "cpp",
            "fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
            "pattern": {
                "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                "file": 1,
                "line": 2,
                "column": 3,
                "severity": 4,
                "message": 5
            }
        }
    }
]

}

理論的には、このファイルはワークスペースのルートに置くとうまくいくはずなので、隠しディレクトリ(.vscode)にあるファイルをリビジョン管理システムにチェックインすることはできません。私はまだ実際にうまくいくのを見ていません。それをテストしなさい、しかし失敗したら、それを.vscodeに入れなさい。いずれにせよ、IDEは、そうでない場合には混乱するでしょう。 (はい、現時点では、これはSubversionに.vscodeをチェックインすることを余儀なくされたことを意味します。これは不満です。)私のビルドスクリプト(図示せず)は、単に私の場合は、中間子を作成し、その中に構築します(私の場合は忍者を使用)。

  1. 実行、デバッグ、接続、停止これらは、 "launch.json"で定義されている別の一連のタスクです。または少なくとも彼らはかつてあった。マイクロソフトはそのようなドキュメントのハッシュを作成しました、私はもう確信できません。
1
breakpoint

VSコードでC++プロジェクトをビルド/実行するには、ワークスペースフォルダの.vscodeフォルダにあるtasks.jsonファイルを手動で設定する必要があります。 tasks.jsonを開くには、ctrl + shift + Pと入力してConfigure tasksと入力し、enterを押します。 tasks.json

ここで私は私のtasks.jsonファイルに、ファイルをわかりやすくするためのコメントを付けて提供しています。これはtasks.jsonを設定するためのリファレンスとして使用できます

tasks.json

{
    "version": "2.0.0",

    "tasks": [

        {
            "label": "build & run",     //It's name of the task , you can have several tasks 
            "type": "Shell",    //type can be either 'Shell' or 'process' , more details will be given below
            "command": "g++",   
            "args": [
                "-g",   //gnu debugging flag , only necessary if you want to perform debugging on file  
                "${file}",  //${file} gives full path of the file
                "-o",   
                "${workspaceFolder}\\build\\${fileBasenameNoExtension}",    //output file name
                "&&",   //to join building and running of the file
                "${workspaceFolder}\\build\\${fileBasenameNoExtension}"
            ],
            "group": {
                "kind": "build",    //defines to which group the task belongs
                "isDefault": true
            },
            "presentation": {   //Explained in detail below
                "echo": false,
                "reveal": "always",
                "focus": true,
                "panel": "shared",
                "clear": false,
                "showReuseMessage": false
            },
            "problemMatcher": "$gcc"
        },

    ]
}

今、 VSコードタスクドキュメントから直接述べる

typeプロパティの説明:

  • type :タスクの種類。カスタムタスクの場合、これはシェルまたはプロセスのいずれかです。 Shellが指定されている場合、コマンドはシェルコマンドとして解釈されます(たとえば、bash、cmd、またはPowerShell)。 processが指定された場合、コマンドは実行するプロセスとして解釈されます。

端末の動作は、tasks.jsonpresentationプロパティを使用して制御できます。以下のプロパティがあります。

  • reveal :Integrated Terminalパネルを前面に表示するかどうかを制御します。有効な値は以下のとおりです。

    • always - パネルは常に前面に出ます。これがデフォルトです
    • never - ユーザーは表示>端末コマンド(Ctrl + `)を使用して端末パネルを明示的に前面に表示する必要があります。
    • silent - 出力のエラーおよび警告がスキャンされていない場合にのみ、端末パネルが前面に表示されます。
  • focus :端末が入力フォーカスを取っているかどうかを制御します。デフォルトはfalseです。

  • echo :端末で実行したコマンドをエコーするかどうかを制御します。デフォルトはtrueです。
  • showReuseMessage :「ターミナルはタスクによって再利用されます。何かキーを押して閉じます」というメッセージを表示するかどうかを制御します。
  • panel :端末インスタンスをタスク実行間で共有するかどうかを制御します。可能な値は次のとおりです。
    • shared:端末は共有されており、他のタスク実行の出力は同じ端末に追加されます。
    • dedicated:端末は特定のタスク専用です。そのタスクが再度実行されると、端末は再利用されます。ただし、別のタスクの出力は別の端末に表示されます。
    • new:そのタスクの実行ごとに新しいクリーンターミナルを使用しています。
  • clear: このタスクが実行される前に端末をクリアするかどうかを制御します。デフォルトはfalseです。
1
joker007