vscode의 tasks.json 파일

준혁·2023년 9월 5일
0

출처1
출처2

기본적으로 우리가 vscode를 통해 어떤 폴더를 열고 그 폴더안에서 코드들을 돌리려고 하면, 세팅 없이는 불가능하다. vscode는 단순 편집기에 지나지 않기에 vscode와 여러가지 언어에 맞는 빌드툴, 디버깅 툴을 연결해야 된다.

이에 따라 vscode는 해당 폴더를 효율적으로 관리하고 명령을 단축화시키기 위해 tasks.json 파일을 사용한다.
.vscode폴더는 해당 워킹 디렉토리의 루트에 만들어 관리한다.

{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation": {
        "reveal": "always"
    },
    "tasks": [
        {
            "label": "save and compile for C++",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",
            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        {
            "label": "save and compile for C",
            "command": "gcc",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",
            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        {
            "label": "execute",
            "command": "cmd",
            "group": "test",
            "args": [
                "/C",
                "${fileDirname}\\${fileBasenameNoExtension}"
            ]
        },
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 활성 파일 빌드",
            "command": "C:\\MinGW\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "디버거에서 생성된 작업입니다."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 활성 파일 빌드",
            "command": "C:\\MinGW\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
//            "group": {
//               "kind": "build",
//                "isDefault": true
//            },
            
            "detail": "디버거에서 생성된 작업입니다."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 활성 파일 빌드",
            "command": "C:\\MinGW\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
              
            // "group": {
            //     "kind": "build",
            //     "isDefault": true
            // },

            "detail": "컴파일러: C:\\MinGW\\bin\\gcc.exe"
        }
    ]
}

한도끝도 없이 꼬인 tasks.json파일을 드디어 "공부" 후 까보았다.

당연히 JS를 이용한 데이터전송파일이니까 확장자가 json

vscode에서 명령어 팔레트(f1)을 열고 tasks를 보니...

존나 많은 것을 알 수 있다.

execute
save and compile for C++
save and compile for C
C/C++: gcc.exe 활성 파일 빌드(detail: 디버거에서 생성된 작업입니다.)
C/C++: gcc.exe 활성 파일 빌드(detail: 컴파일러: C:\MinGW\bin\gcc.exe)
C/C++: g++.exe 활성 파일 빌드

tasks의 객체 안에 배열 형식으로 그 배열 안에 각각의 객체를 넣고 있다.
각각의 객체 안의 key-value 값들로 vscode에 원하는 명령과 인자를 전달할 수 있다.

이때 "command": "g++"에 의문을 가졌다. "command" key는 실행할 명령어에 해당하는데 경로가 아닌 단순 g++이길래 이것도 과거에 환경변수로 설정을 했었나 했는데

역시는 역시다. MinGW\bin으로 PATH를 지정했기에 우선 해당 PATH를 찾기에 가능한 것이였다.

profile
멍청한 나를 위해 쉽게 풀어쓴 개발 기술블로그

0개의 댓글