MicrosoftのVisual Studio Codeエディターは非常に優れていますが、C ++プロジェクトのビルドに対するデフォルトのサポートはありません。
これを行うにはどうすればよいですか?
MicrosoftのVisual Studio Codeエディターは非常に優れていますが、C ++プロジェクトのビルドに対するデフォルトのサポートはありません。
これを行うにはどうすればよいですか?
回答:
C ++コードをコンパイルして実行するはるかに簡単な方法があり、構成は必要ありません。
Ctrl+Alt+N
か、を押しF1
てから選択/入力Run Code
するか、テキストエディターを右クリックRun Code
してコンテキストメニューをクリックすると、コードがコンパイルされて実行され、出力がに表示されます出力ウィンドウ。さらに、必要に応じてさまざまなC ++コンパイラを使用して、settings.jsonの構成を更新できます。C++のデフォルトの構成は次のとおりです。
"code-runner.executorMap": {
"cpp": "g++ $fullFileName && ./a.out"
}
running blablabla
。プロンプトなし、何も。コードの実行を停止するにはどうすればよいですか?
Ctrl+Alt+M
。stdinを使用してデータを読み取るには、File
-> Preference
->に移動してSettings
を設定し"code-runner.runInTerminal": true
ます。詳細については、github.com / formulahendry / vscode
ビルドタスクはプロジェクト固有です。新しいプロジェクトを作成するには、Visual Studio Codeでディレクトリを開きます。
ここの説明に従って、Ctrl++ Shift+を押しP、タイプConfigure 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 を押すと実行され、エディターでエラーに下線が付きます。
ctrl+alt+b
ビルドタスク用です。
新しい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
}
}
}
]
}
.vscode
です。gitリビジョンコントロールの1つの可能性は.gitignore
、のようなパターンに使用することです!.vscode/tasks.json
。
これは、VSをC ++用に構成する方法です
適切なパスをMinGWがインストールされている場所に変更してください
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
}
参照:
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include"
VSコードでC ++プロジェクトをビルド/実行するには、ワークスペースフォルダーの.vscodeフォルダーにあるtasks.jsonファイルを手動で構成する必要があります。tasks.jsonを開くには、Ctrl + Shift + P キーを押し、「タスクの構成」と入力して、入力し、それはに行くことができます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コードタスクのドキュメントから直接述べます
タイププロパティの説明:
- タイプ:タスクのタイプ。カスタムタスクの場合、これはシェルまたはプロセスのいずれかになります。shellが指定されている場合、コマンドはシェルコマンドとして解釈されます(例:bash、cmd、またはPowerShell)。プロセスが指定されている場合、コマンドは実行するプロセスとして解釈されます。
端末の動作は、tasks.jsonのプレゼンテーションプロパティを使用して制御できます 。次のプロパティを提供します。
明らかに:統合端末パネルを前面に表示するかどうかを制御します。有効な値は次のとおりです。
- 常にパネルは常に前面に表示されます。これがデフォルトです
- 決してユーザーは、[表示]> [ターミナル]コマンド(Ctrl + `)を使用して、ターミナルパネルを明示的に前面に移動する必要があります。
- サイレント -出力のエラーと警告がスキャンされない場合にのみ、ターミナルパネルが前面に表示されます。
focus:端末が入力フォーカスを取得しているかどうかを制御します。デフォルトはfalseです。
- echo:実行されたコマンドを端末にエコーするかどうかを制御します。デフォルトはtrueです。
- showReuseMessage:「ターミナルはタスクによって再利用されます。何かのキーを押して閉じる」メッセージを表示するかどうかを制御します。
- panel:端末インスタンスがタスク実行間で共有されるかどうかを制御します。可能な値は次のとおりです。
- shared:端末が共有され、他のタスク実行の出力が同じ端末に追加されます。
- 専用:端末は特定のタスク専用です。そのタスクが再度実行されると、端末は再利用されます。ただし、別のタスクの出力は別の端末に表示されます。
- new:そのタスクのすべての実行は、新しいクリーンターミナルを使用しています。
- clear:このタスクを実行する前に端末をクリアするかどうかを制御します。デフォルトはfalseです。
明確なドキュメントがないことに対する不満から、私はgithubにMacプロジェクトを作成しました(ビルドとデバッグの両方)だけで動作するはずです。
XCodeとVSCode Microsoft cpptools拡張が必要であることに注意してください。
私はWindowsとLinuxについても同じことを計画しています(Microsoftがまともなドキュメントを最初に書いていない限り...)。
プロジェクトに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
}
}
}
]
}
これはbuild
、CMake構成のワークスペースのルートにフォルダーがあることを前提としています。
VScodeに「CMakeビルド」コマンドを追加するCMake統合拡張機能もあります。
PS!problemMatcher
以下のためのセットアップですclang
-builds。GCCを使用するには、に変更fileLocation
する必要があると思いますがrelative
、これはテストしていません。
これは、g ++コンパイラを使用してVS for 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 Code」拡張機能もインストールされています
ここでの基本的な問題は、C ++プログラムのビルドとリンクが、使用中のビルドシステムに大きく依存していることです。プラグインとカスタムコードのいくつかの組み合わせを使用して、次の異なるタスクをサポートする必要があります。
エディターの一般的なC ++言語サポート。これは通常、ms-vscode.cpptoolsを使用して行われます。ほとんどの人は、ビルドサポートなど、他の多くのものも処理することを期待しています。少し時間を節約しましょう。そうではありません。ただし、とにかくそれが必要になるでしょう。
タスクのビルド、クリーン、および再ビルド。ここで、ビルドシステムの選択が非常に重要になります。CMakeやAutoconf(god help you)などのプラグインが見つかりますが、MesonやNinjaなどのプラグインを使用している場合は、ヘルパースクリプトをいくつか作成し、カスタムの "tasks.json"ファイルを構成してこれらを処理します。Microsoftは、このファイルに関するすべての変更を、最後のいくつかのバージョンで、呼び出されることになっている場所と、ファイルが移動できる場所(はい、場所S)まで、完全に変更しました。さらに悪いことに、下位互換性が維持されているため、「バージョン」キーを使用して必要なバリアントを確実に指定できます。詳細はこちら:
https://code.visualstudio.com/docs/editor/tasks
...ただし、次と競合することに注意してください。
https://code.visualstudio.com/docs/languages/cpp
警告:以下のすべての回答では、「2.0.0」より前の「バージョン」タグで始まるものはすべて廃止されています。
これが私が現時点で最も近いものです。スクリプトの大部分をキックオフすることに注意してください。これは実際に使用できるメニューエントリを提供するものではなく、さらに3つの明示的なエントリを作成しないと、デバッグとリリースを選択する適切な方法はありません。ここに。以上のことから、現時点で.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はうまくいきません。(はい、現時点では、これは.vscodeをsubversionにチェックインすることを余儀なくされたことを意味します。これは不満です)。ビルドスクリプト(図には示されていません)は、私のケース、中間子、そしてその中に(私の場合、忍者を使って)ビルドします。
更新されたVSコードを使用すると、次の方法でそれを行うことができます。
(Ctrl+ P)を押して入力:
ext install cpptools
フォルダーを開き(Ctrl+ K&Ctrl+ O)、フォルダー内に拡張子.cppを持つ新しいファイルを作成します(例:hello.cpp):
コードを入力して保存をクリックします。
(Ctrl+ Shift+ Pと入力してから、リストの下部にあるをConfigure task runner
選択other
します。
同じフォルダに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%
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"
}
(Ctrl+ Shift+ Bをクリックしてビルドタスクを実行します。これにより、プロジェクトの.objファイルと.exeファイルが作成されます。
プロジェクトをデバッグするにはF5、[ C ++(Windows)]をクリックして選択します。
ではlaunch.jsonファイル、次の行と編集保存ファイル:
"program": "${workspaceRoot}/hello.exe",
ヒットF5。
2.0.0
Visual Studio Code、https://gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454のバージョンタスクを持つこの最新の要旨を参照できます。
タスクを更新せずに、各ファイルを簡単にコンパイルして実行できます。これは一般的で、入力エントリのターミナルも開きます。
Extension Code Runnerを使用して、ショートカットアイコンで右上にある再生アイコンでコードを実行Ctrl+Alt+N
し、中止することができますCtrl+Alt+M
。ただし、デフォルトではプログラムの出力のみが表示されますが、入力を受け取るには、いくつかの手順に従う必要があります。
Ctrl +、次に設定メニューが開き、Extensions> Run Code Configurationでその属性を下にスクロールして、settings.jsonでEditを見つけてクリックし、次のコードをサイトに追加します。
{
"code-runner.runInTerminal": true
}
現在、MicrosoftからのC / C ++言語拡張があります。「クイックオープン」の項目(Ctrl+ p)に移動して次のように入力すると、インストールできます。
ext install cpptools
あなたはそれについてここで読むことができます:
https://blogs.msdn.microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/
2016年5月現在、非常に基本的なものです。