TouchDesignerのCPlusPlus OPをVSCodeでビルド・デバッグする

[前回の記事](https://qiita.com/syoukera/items/ee30d9e548c2d50390d1)にてVisual Studioという開発環境を用いたCPlusPlus OPのビルドおよびデバッグの方法をまとめたが，Visual Studioは高機能である代わりに習得に時間がかかる．
そこで，軽量かつ操作性の良いエディタであるVisual Studio Code（以下VSCode）で編集できる環境を構築する．

### 環境
Windows 10 Home
Visual Studio Community 2019
TouchDesigner 2021.13610

# ビルド設定
VSCode上でビルドを実行するためには`tasks.json`というファイルを作成し，ビルドに使用するMSBuildのパスを指定してやる必要がある．
## tasks.jsonの生成
今回も前回と同様に`C:\Program Files\Derivative\TouchDesigner\Samples\CPlusPlus\DAT`フォルダ中にあるCPlusPlusDATExampleを実行しながら説明する．
前回の記事と同様にVisual Studioを，さらに[VSCode](https://code.visualstudio.com/)をインストールしておく．
上記ファイルをデスクトップなどの適当な場所にコピーする．（筆者環境では`C:\Users\sakir\OneDrive\デスクトップ\DAT`とした．）
VSCodeを立ち上げて[ファイル]>>[フォルダーを開く]から上でコピーしたDATフォルダーを選択する．`.sln`ファイルが直下にあるフォルダである必要があるらしい．
ビルドの実行コマンド`Ctrl + Shift + B`を押下すると，以下の図のようにビルドタスクを構成するという選択肢が表示されるのでクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/59b86758-b232-7eef-98ee-03167e47e365.png)
続いて`tasks.json`を生成する選択する．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/c6120aac-c2b1-da88-891d-7149c3ff2f40.png)
ビルドに使用するコマンドを選択できるのでMSBuildを選択．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/947820fc-3398-0fdb-138a-860fb6a81b47.png)
`.vscode`フォルダの中に`tasks.json`が生成され，エディタ上でも開かれる．
デフォルトでは以下のように記述されている．

```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",
            "type": "shell",
            "command": "msbuild",
            "args": [
                // Ask msbuild to generate full paths for file names.
                "/property:GenerateFullPaths=true",
                "/t:build",
                // Do not generate summary otherwise it leads to duplicate errors in Problems panel
                "/consoleloggerparameters:NoSummary"
            ],
            "group": "build",
            "presentation": {
                // Reveal the output only if unrecognized errors occur.
                "reveal": "silent"
            },
            // Use the standard MS compiler pattern to detect errors, warnings and infos
            "problemMatcher": "$msCompile"
        }
    ]
}
```
## tasks.jsonの編集

デフォルトの`tasks.json`のままで`Ctrl + Shift + B`でビルドを実行するとMSBuildが見つからないとのエラーが出るので，パスを通すか`tasks.json`にフルパスを記載する．
以下のようにフルパスを指定するとビルドが終了し，`Debug`フォルダの中に`CPlusPlusDATExample.dll`が生成される．

```
            "command": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\MSBuild\\Current\\Bin\\MSBuild.exe",
```
後は前回の記事と同様にTouchDesignerを起動してCPlusPlus DATを作成しdllファイルを指定すると，コードの中身を反映したDATを使用することができる．

# デバッグ設定
デバッグを実行するためには，`launch.json`を生成し，実行プログラムであるTouchDesignerとデバッグで使用する`.toe`ファイルを指定してやる．
## launch.jsonの生成
左端のデバッグのアイコンをクリックすると表示される[実行とデバッグ]をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/f347d773-b006-3bb8-9a93-399862e39df5.png)
続いてC++ (Windows)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/c67eb299-d35f-1a35-1f64-37a05708bd23.png)
cl.exeを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/9b5ae4c9-a505-0ab1-cd93-629ce60c0f31.png)
以上の操作で`launch.json`が生成される．デフォルトの内容は以下の通り．

```launch.json
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "cl.exe - アクティブ ファイルのビルドとデバッグ",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "console": "externalTerminal",
            "preLaunchTask": "C/C++: cl.exe アクティブなファイルのビルド"
        }
    ]
}
```

## launch.jsonの編集

デバッグは以下のボタンから実行できる．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/96aaacc8-2f61-504f-6f0b-0abc0bf71b3f.png)
この状態でデバッグを実行すると"C/C++: cl.exe アクティブなファイルのビルド"というタスクが見つけられないというエラーが起こる．
そこで，`launch.json`の`preLaunchTask`を以下のように変更する．

```
            "preLaunchTask": "build"
```
ここで指定した`build`という名前は`tasks.json`指定した`label`と対応しており，`preLaunchTask`の名前の通りデバッグの実行前に行うタスクを指定している．
つまり，毎回のデバッグの実行前にMSBuildによるビルドを行う設定になる．

続いてデバッグを実行すると，実行ファイルが見つからないとのエラーになるので，前回の記事と同様にTouchDesignerのプログラムと生成されたdllファイルを使用する`.toe`ファイルを指定する．

```
            "program": "C:\\Program Files\\Derivative\\TouchDesigner\\bin\\TouchDesigner.exe",
            "args": ["C:\\Users\\sakir\\OneDrive\\デスクトップ\\DAT\\CPlusPlus_Debuger.toe"],
```

以上が上手くいくと，VSCodeのデバッグを実行するとTouchDesignerが開いてデバッグが開始される．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267183/2e5eb709-4f58-35fa-f22b-1a4fb9e11137.png)


### 参考
https://qiita.com/hibara/items/fa66c3241293b7d43eae