この記事では、最初に公式のVSCODEドキュメントのタスクの説明を翻訳し、次にC / C ++の例を使用して、VSCODEの自動化ツールの実施形態を説明し、最後にC / C ++コンパイルタスクを完了するようにタスクを構成する方法を紹介します。
1.公式文書でのタスクの説明
自動化されたタスクツールは、TypeScript(コンパイラ)、ESLint、TSLint(コード検証)など、リンティング(コード検証)、ビルド(コンパイル)、パッケージング(パッケージ)、テスト(テスト)、またはデプロイメント(デプロイメント)のエンジニアリングプラクティスで広く使用されています。 、CMake Gulp Jake Rake(ビルドシステム)を作成します。
これらのツールのほとんどはコマンドラインで実行され、ソフトウェア開発サイクル(編集、コンパイル、テスト、およびデバッグ)の内部または外部に配置できます。ソフトウェア開発サイクルにおけるこれらのツールの重要性を考慮すると、これらのツールを実行し、VSCODEで結果を分析することは非常に役立ちます。でVSCODEタスクのスクリプトを実行し、プロセスを開始することができ、多くのツールは直接VSCODEに、コマンドラインコマンド、および再編集(ツール)コードを入力することなく使用することができます。ワークスペースまたはフォルダーで完了するタスクは、作業ファイルディレクトリの下の.vscodeフォルダーにあるtasks.jsonファイルによって構成されます。
一部の拡張機能は、タスクプロバイダーを介して一部のタスクを完了することができ、これらの新しいタスク構成は、指定されたワークスペースファイルのtasks.jsonフォルダーに追加されます。
注:タスクはワークスペースで動作するファイルのみをサポートし、単一のファイルを編集する場合は使用できません。
個人的な意見:VSCODEがフォルダーベースのタスクを実行すると、VSCODEはターミナルを起動し、ターミナルでtasks.json
指定されたタスクコンテンツを実行します。これは、シェルで実行可能である必要があります。これは、VSCODEがこのメカニズムを通じて強力な端末機能を備えており、この「小さな」タスクを簡単にコンパイルできることも意味します。さらに、一部の拡張機能は、一般的なタスクの作成を完了するのに役立つ場合があります。つまり、単純なテンプレートを提供します。(たとえば、C / C ++はコンパイルされたテンプレートを提供します)
2つ、C / C ++および自動化ツール
公式声明から、私たちは知っています:
- 自動化ツールはソフトウェアリンクに存在します
- VSCODEは、これらのツールを直接転送する手段を提供します:Tasks.json
- tasks.jsonはスクリプトとプログラムを実行できます
- Tasks.jsonはワークスペースに関連しています
C / C ++で開発する場合、誰もがC / C ++プラグインをダウンロードすると思います。彼が果たす役割は、はじめに説明したとおりです。IntelliSense、デバッグ、コードブラウジング。コードブラウジング機能は、定義に移動、すべての参照の検索、その他の機能など、いくつかのC / C ++ブラウジングの追加機能を追加できます。このプラグインは、関数の編集、コンパイル、およびデバッグを完了するのに役立ちます。自動化ツールの種類を思い出してください。
- リンティング(コード検証)
- 構築(コンパイル);
- 包装;
- テスト;
- 部署(部署)。
C / C ++ツールは、コードの検証と編集のためのエクスペリエンスのアップグレードを提供します。ただし、最後の3つのタスクを完了する方法はありません。C/ C ++の場合、コンパイルが完了g++
してgdb
完了します。コンパイル、パッケージ化、テスト、および展開は、MakefileやCMakeなどの自動コンパイルツールによって完了します。VSCODEtask.json
は、ターミナルを使用してこれらを実行するだけです。ツール。これの利点は次のとおりです。
- 既存の自動化ツールの効率的な使用
- 再利用可能な自動化ツール
C / C ++の場合、task.json
実行されると、VSCODEは端末を作成し、タスクの指示を出します。VSCODEには次のものがあります。
- オペレーティングシステムのファイル操作
- シェル、Pythonスクリプトを実行します
- 自動化ツールcmakeを実行し、作成します
- 指定されたプログラムを実行します
これについて言えば、tasks.json自動化ツール間の関係を理解する必要があります。
3つ目は、C / C ++コンパイルタスクを構成することです。
3.1VSCODEのJSON
VSCODE
これは採用された構成ファイル形式JSON
であるため、VSCODE
認識された構成ファイルを作成するには、最初にその文法形式を理解する必要があります。JSON(JavaScript Object Notation)
さJavaScript
に比べて、1つの軽量なオブジェクトデータ交換形式で記述されXML
、JSON
構造的に、より一般的な言語構造[2]にマッピングされたデータ。JSON
文法規則:
- データは名前と値のペアになっています
- データはコンマで区切られます
- 中括弧はオブジェクトを保存します
- 角括弧はアレイを保持します
JSON
のデータは"name":value
形式で書き込まれ、さまざまな値はコンマで区切られます。名前は二重引用符で囲み、値は次のようになります。
- 数値(整数または浮動小数点)
- 文字列(二重引用符で囲む)
- 論理値(trueまたはfalse)
- 配列(角括弧内)
- オブジェクト(中括弧内)
- ヌル
オブジェクトは名前の値のコンテナーであり、配列はオブジェクトのコンテナーです。次のようなJSONファイルをVSCODEで開くだけですsettings.json
。
{
"window.restoreWindows": "all",
"extensions.ignoreRecommendations": true,
"latex-workshop.view.pdf.viewer": "tab",
"editor.formatOnType": true,
"editor.find.cursorMoveOnType": true,
"workbench.colorTheme": "Visual Studio Dark",
"workbench.editorAssociations": [
{
"viewType": "jupyter.notebook.ipynb",
"filenamePattern": "*.ipynb"
}
],
"explorer.confirmDelete": false,
}
内部に8つの名前と値のペアがあるオブジェクトを表します。VSCODEでは、ファイル名は特定の種類の設定を表し、設定するタスクタスクもxxx.json
。などのディレクトリである必要があります。
3.2VSCODE用のC / C ++コンパイルタスクの記述
tasks.json
作業エリアにあり.vscode
ます。JSON
文法に従って直接vscode
タスクの内容を書くことも、タスクテンプレートを介してタスクの内容を生成することもできます。コンパイルされたプログラムは次のとおりです。
//hello.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
cout<<"hello world"<<endl;
vector<double> dvec(10,4396);
}
C / C ++プラグインには、単純なコンパイルタスクが組み込まれていますが、ここで少し変更できます。この単純なテンプレートを開いて使用するにはどうすればよいですか?
- 検索する
Tasks: Configure Tasks
- ポップアップダイアログでコンパイラを選択します
C/C++:g++ build active file
(コンパイラが対応しなければならないことに注意してください)
コンパイラは、C / C ++ファイルなので、私を選択してくださいので/usr/bin/g++
。OK!テンプレートが生成されます。このテンプレートの機能を見てみましょう。
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "compiler: /usr/bin/gcc"
}
]
}
各キーと値のペアの具体的な意味は、付録(1)に記載されています。私たちは3つの場所だけを気にします:
- タイプ
- コマンド
- 引数
type
オプションであることができるshell
とprocess
ザ・C / C ++プラグインは、シェル別名とる。cppbuild
変形することなく、より多くの表意文字である;それはcommand
、それはC / C ++をコンパイルするので、任意のコマンドまたはスクリプトであることができ、それはコンパイラの名前でなければなら/usr/bin/g++
ずに変更;args
コマンドの追加パラメーター(つまりオプション)、g ++に対応するものは当然コンパイルオプションです。ご覧のとおり、テンプレートはデフォルト-g
でデバッグをオンにし、オブジェクトファイルを生成し-o
、変更されません。事前定義された変数と呼ばれるオプションの変数名。、コンパイルに必要なものを説明するために使用されます。
${file}
現在編集中のドキュメントの名前(cpp名)${fileDirname}
現在編集されているドキュメントの名前は、ディレクトリに対応しています${fileBasenameNoExtension}
現在ドキュメント名を編集しているサフィックスはありません
詳細な説明は付録(2)にあります。その場合、上記のタスクで実行されるコマンドは次と同等g++ -g hello.cpp -o /home/junwu/Desktop/helloworld
です。したがって、デフォルトのテンプレートは、現在のディレクトリで編集されているcppファイルとサフィックスのないソースファイルによって生成された実行可能プログラムであり、追加のデバッグ情報が含まれます。label
意味は私たちの議論を検証します:C/C++: gcc build active file
。
ヒント:現在編集中のファイル(現在のアクティブファイル)の名前は、開いているエディター(開いているエディター)と同じではありません。
最終的な実行結果を見てみましょう:
[1] https://code.visualstudio.com/docs/editor/tasks
[2] https://www.zhihu.com/question/25636060
[3] https:/ / www .w3school.com.cn / json / json_syntax.asp
[4] https://code.visualstudio.com/docs/editor/variables-reference
付録1:
ファーストネーム | 値 |
---|---|
ラベル | ユーザーインターフェイスで使用されるタスクのラベル。 |
タイプ | タスクのタイプ。カスタムタスクの場合、これはシェルまたはプロセスのいずれかになります。シェルが指定されている場合、コマンドはシェルコマンドとして解釈されます(たとえば |
コマンド | 実行する実際のコマンド。 |
ウィンドウズ | Windows固有のプロパティ。コマンドがWindowsオペレーティングシステムで実行されるときに、デフォルトのプロパティの代わりに使用されます。 |
グループ | タスクが属するグループを定義します。この例では、テストグループに属しています。テストグループに属するタスクは、コマンドパレットから[テストタスクの実行]を実行することで実行できます。 |
プレゼンテーション | タスク出力がユーザーインターフェイスでどのように処理されるかを定義します。この例では、出力を示す統合端末が常に表示され、タスクの実行ごとに新しい端末が作成されます。 |
オプション | cwd(現在の作業ディレクトリ)、env(環境変数)、またはshell(デフォルトのシェル)のデフォルトをオーバーライドします。オプションはタスクごとに設定できますが、グローバルまたはプラットフォームごとに設定することもできます。ここで構成された環境変数は、タスクスクリプトまたはプロセス内からのみ参照でき、引数、コマンド、またはその他のタスク属性の一部である場合は解決されません。 |
runOptions | タスクをいつどのように実行するかを定義します。 |
付録(2)
ファーストネーム | 値 |
---|---|
$ {workspaceFolder} | VSCodeで開いたフォルダーのパス |
$ {workspaceFolderBasename} | スラッシュ(/)なしでVSCodeで開かれたフォルダーの名前 |
$ {ファイル} | 現在開いているファイル |
$ {fileWorkspaceFolder} | 現在開いているファイルのワークスペースフォルダ |
$ {relativeFile} | WorkspaceFolderに関連して現在開いているファイル |
$ {relativeFileDirname} | WorkspaceFolderを基準にした現在開いているファイルのdirname |
$ {fileBasename} | 現在開いているファイルのベース名 |
$ {fileBasenameNoExtension} | 現在開いているファイルのベース名(ファイル拡張子なし) |
$ {fileDirname} | 現在開いているファイルのdirname |
$ {fileExtname} | 現在開いているファイルの拡張子 |
$ {cwd} | 起動時のタスクランナーの現在の作業ディレクトリ |
$ {lineNumber} | アクティブファイルで現在選択されている行番号 |
$ {selectedText} | アクティブファイルで現在選択されているテキスト |
$ {execPath} | 実行中のVSCode実行可能ファイルへのパス |
$ {defaultBuildTask} | デフォルトのビルドタスクの名前 |
$ {pathSeparator} | オペレーティングシステムがファイルパス内のコンポーネントを区切るために使用する文字 |