vscode gcc g++ c/c++ 디버깅 컴파일 하기 위한 tasks.json, launch.json Makefile

1. 먼저 vscode extension 으로

c/c++, c/c++ Extension Pack 이 설치되어 있어야 한다.

2. makefile 의 cflag, lflag에 -g로 디버그 옵션이 있어야 디버깅이 뜬다.

------------------------------
tasks.json
------------------------------
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "make build",
            "command": "make",
            "args": [
                "-j4",
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "makefile project"
        }
    ]
}
------------------------------
launch.json
------------------------------
{
    "version": "2.0.0",
    "configurations": [
        {
            "name": "build and debug for c++",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${workspaceFolderBasename}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make build"
        }
    ],
}
------------------------------
launch.json for mac (using lldb)
------------------------------
{
    "version": "2.0.0",
    "configurations": [
        {
            "name": "(lldb) 시작",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${workspaceFolderBasename}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "make build"
        },
    ],
}
------------------------------
hello_gcc 폴더에 hello.c, f1.c 2개 파일이 있는 프로젝트

gcc Makefile
------------------------------
# 컴파일러 지정
CC = gcc

# 컴파일 옵션 (-Wall: 경고 메시지 출력, -g: 디버깅 정보 포함)
CFLAGS = -Wall -g

# 실행 파일 이름
TARGET = hello_gcc

# 소스 파일 목록
SRCS = hello.c \
f1.c

# 오브젝트 파일 목록 (%.c → %.o 변환)
OBJS = $(SRCS:.c=.o)

# 기본 규칙: 실행 파일 만들기
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^

# 개별 소스 파일을 오브젝트 파일로 컴파일
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<

# 정리 (생성된 바이너리 및 오브젝트 파일 삭제)
clean:
rm -f $(TARGET) $(OBJS)
------------------------------
hello_g++ 폴더에 hello.cpp, f1.cpp 2개 파일이 있는 프로젝트

g++ Makefile
------------------------------
# 컴파일러 지정
CXX = g++

# 컴파일 옵션 (-Wall: 경고 메시지 출력, -g: 디버깅 정보 포함)
CXXFLAGS = -Wall -g

# 실행 파일 이름
TARGET = hello_g++

# 소스 파일 목록
SRCS = hello.cpp \
f1.cpp

# 오브젝트 파일 목록 (%.cpp → %.o 변환)
OBJS = $(SRCS:.cpp=.o)

# 기본 규칙: 실행 파일 만들기
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^

# 개별 소스 파일을 오브젝트 파일로 컴파일
%.o: %.c
$(CXX) $(CXXFLAGS) -c -o $@ $<

# 정리 (생성된 바이너리 및 오브젝트 파일 삭제)
clean:
rm -f $(TARGET) $(OBJS)
------------------------------

windows 용 gcc, g++ 컴파일러
w64devkit
https://github.com/skeeto/w64devkit/releases


댓글

이 블로그의 인기 게시물

공유기 2개 쓰는데 동일 네트워크 구성하기 ASUS 공유기 + iptime 공유기, LAN, WIFI 연결

OneDrive가 바꾼 문서, 사진, 바탕화면 기본 폴더 복구하기(레지스트리 사용안하고 복구)

갤럭시북 이온 노트북 소음 잡기