web-dev-qa-db-ja.com

Visual StudioCodeでC ++コードをビルドして実行する方法は?

現在コードをコンパイルしているtasks.jsonスクリプトがあります

{
    "version": "0.1.0",
    "command": "gcc",
    "isShellCommand": true,
    "args": ["-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"],
    "echoCommand": true,
    "showOutput": "always",
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}

これは問題なく動作しますが、ファイルを実行する場合は、コマンドラインからexeを実行する必要があります。タスクでもこれを行うことは可能ですか?それで、ビルドが正常に完了すると、別のタスクが実行されますか?

4
Arn Vanhoutte

Visual Studio Codeで複数のタスクを構成できます。そのうちの1つは実行可能ファイルをビルドでき、もう1つは実行可能ファイルを実行します。

オプションで、Visual Studio Codeの「実行モード」を調べることもできます( ここ を参照)。 「実行モード」を使用する場合は、実行可能ファイルをビルドするようにVisual Studio Codeを構成して、それを起動できるはずです。

私は「実行モード」にあまり詳しくないので、同様の結果を達成するために複数のタスクを定義する方法について詳しく説明します。


免責事項:Visual Studio Codeは、異なるシェルコマンドを使用するタスクをサポートしていません( ここ を参照)。

そのとおり。現在の状態では、Visual Studio Codeは、さまざまなシェルコマンドを使用するタスクを定義するための「ネイティブ」サポートを備えていません。

免責事項:Visual Studio Codeのタスク出力ペインでは、プログラムにインタラクティブに入力を渡すことはできません。

プログラムがユーザー入力(たとえば、stdinから)に依存している場合は、Visual Studio Code 実行可能ファイルを実行するを使用しない方がよいでしょう。


基本的に、私たちが行う必要があるのは、2つのタスクを定義することです。1つはビルドタスクで、もう1つは起動タスクです。

Visual Studio Codeは、それぞれが異なるシェルコマンドを使用する複数のタスクを定義するための優れたサポートを備えていないため、tasks.json"command"プロパティをcmd(またはsh、Linux/macOSの場合)。また、"args"プロパティを[/C](Linux/macOSの場合は[-c])に設定する必要があります。

これを行う理由は、定義しようとしている各タスクを引数として新しいShellインスタンスに渡す必要があるためです。

次のステップは、ビルドタスクと起動タスクを定義することです。その際、実行したいコマンドをタスク引数として配置する必要があります。例えば:

{
    "taskName": "build",
    "args": ["gcc", "-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"]
}

最後に、ビルドタスクに"isBuildCommand"プロパティを追加し(そして、それがtrueであることを確認します)、起動タスクに"isTestCommand"プロパティを追加します(また、true)であることを確認してください。

その後、tasks.jsonファイルは次のようになります。

{
    "version": "0.1.0",
    "command": "cmd",
    "args": ["/C"],
    "isShellCommand": true,
    "showOutput": "always",
    "suppressTaskName": true,
    "tasks": [
        {
            "taskName": "build",
            "args": ["gcc", "-Wall", "${relativeFile}", "-o", "${relativeFile}.exe", "-pedantic"],
            "isBuildCommand": true
        },
        {
            "taskName": "run",
            "args": ["${relativeFile}.exe"],
            "isTestCommand": true
        }
    ]
}

:各タスク引数をargs配列内の独自の文字列に配置しても機能しない場合は、すべての引数をargs配列。例:

["gcc -Wall ${relativeFile} -o ${relativeFile}.exe -pedantic"]

:キーボードショートカットを使用してタスクを呼び出せるようにする場合は、"workbench.action.tasks.build"および"workbench.action.tasks.test"エディターコマンドを自由に使用できます。

これらのコマンドにキーをバインドする例が必要な場合は、次の例を使用して、キーを keybindings.json ファイルにマップします。

[
    {
        "key": "f6",
        "command": "workbench.action.tasks.build"
    },
    {
        "key": "f7",
        "command": "workbench.action.tasks.test"
    }
}

編集:ビルドタスクにはすでにキーボードショートカットが定義されているため、テストタスクのキーボードショートカットを定義するだけで済みます。別のキーボードショートカットを定義する前に、 ここ を確認してください。

7

ビルド用のタスクを作成し、その引数として実行用のコマンドを渡すことができます。例として、c ++をコンパイルして実行するために使用するタスクを以下に示します。

{

"version": "2.0.0",
"tasks": [
    {
        "label": "g++ build and run",
        "type": "Shell",
        "command": "g++",
        "args": [
            "-g",
            "-o",
            "out.exe",
            "\"${file}\"",
            "&&",
            "./out.exe",
            "<",
            "input.in",
            ">",
            "output.out"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
]
}

上記のタスクでは、ソースファイル(${file}が使用されているため、ファイルの名前はここでは誰でもかまいません)をout.exeにコンパイルし、out.exeから入力を取得し、出力をinput.inに出力しながらoutput.outを実行します。

私のように検索中に他の誰かがこれに遭遇した場合は、_launch.json_のプロパティpreLaunchTaskをビルドタスクのnameプロパティに設定すると、起動前に実行されます。

例えば

"name": "Debug (gdb) Launch", "preLaunchTask": "Build All",

プログラムを起動する前に、_"name": "Builld All"_で_tasks.json_を実行します。

これに関する情報は、 Visual Codeでのデバッグ ドキュメントページで読むことができます。

0
Chris