OS

[MAC] 맥북에서 VS Code로 C++ 빌드하기

아르비스 2021. 2. 24. 12:08

참조 : 

justdoitproject.tistory.com/31

 

[VSCode] Macbook에서 C/C++ 개발환경 구축하기

Mac OS에서 C/C++ 개발하기 윈도우 운영체제를 쓰는 분들이라면 C/C++ 개발시 Visual Studio를 많이 사용하실텐데요. 저도 Windows를 주로 쓰다가 최근에 맥북프로를 사용하게 되면서 C/C++ 개발환경을 새롭

justdoitproject.tistory.com

 

여러곳에서 맥북에서 C++ 개발환경 구축하는것이 나와 있으나..

막상 잘 안된다.

그래서 나만의 방식으로 정리해 봤다.

 

1. VS Code 깔기

code.visualstudio.com/Download

 

Download Visual Studio Code - Mac, Linux, Windows

Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.

code.visualstudio.com

다운 받아서 설치한다.

 

2. Extension 설정 (plugin)

좌측에 Extenstion 아이콘을 누르고 (단축키: ⌘(Command) + ⇧(Shift) + P) 상단에서 C/C++를 검색

C/C++ install

 

상단에서 다시 lldb를 검색합니다.
Vadim Chugunov의 CodeLLDB를 설치합니다. CodeLLDB는 VSCode에서 lldb를 사용해 디버깅할 수 있는 확장 플러그인 설치

두가지가 모두 설치되었다면 VSCode를 종료하고 다시 시작합니다.

3. C/C++ 파일 빌드하기

3.1 task.json 파일 수정하기

Explorer 패널에서 방금 만든 cpp 파일을 선택하고 ⌘(Command) + ⇧(Shift) + B를 누릅니다.
목록 중에 C/C++: g++ build active file을 찾고 우측에 있는 톱니바퀴모양 아이콘을 선택합니다.


Explorer 패널에서 .vscode가 생기고 그 아래 task.json 파일이 열릴 것입니다.
task.json 파일 중 arg를 아래와 같이 바꿔줍니다.

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: cpp 활성 파일 빌드",
			"command": "/usr/bin/cpp",
			"args": [
				"-g",
				"${file}",
				"-o",
				"${fileDirname}/${fileBasenameNoExtension}"
			],
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"detail": "컴파일러: /usr/bin/cpp"
		},
		{
			"type": "shell",
			"label": "C/C++: g++ 활성 파일 빌드 수정",
			"command": "/usr/bin/g++",
			"args": [
				"-std=c++17",
				"-stdlib=libc++",
				"-g",
				"${file}",
				"-o",
				"${fileDirname}/${fileBasenameNoExtension}.out",
				"&&",
				"${fileDirname}/${fileBasenameNoExtension}.out"
			],
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "컴파일러: /usr/bin/g++"
		},
		{
			"label": "exec",
			"type": "shell",
			"command": "${fileDirname}/${fileBasenameNoExtension}.out",
			"group": "build",
			"problemMatcher": []
		}
	]
}

launch.json을 열어서 아래와 같이 수정

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        // {
        //     "name": "cpp - 활성 파일 빌드 및 디버그",
        //     "type": "cppdbg",
        //     "request": "launch",
        //     "program": "${fileDirname}/${fileBasenameNoExtension}",
        //     "args": [],
        //     "stopAtEntry": false,
        //     "cwd": "${workspaceFolder}",
        //     "environment": [],
        //     //"console": "externalTerminal",
        //     "externalConsole": true,
        //     "MIMode": "lldb",
        //     "preLaunchTask": "C/C++: cpp 활성 파일 빌드"
        // },
        { 
            "type": "lldb", 
            "request": "launch", 
            "name": "Launch", 
            "program": "${fileDirname}/${fileBasenameNoExtension}.out", 
            "args": [], 
            "preLaunchTask": "g++ build active file", 
            "stdio": [null,null,null], 
            "terminal": "integrated" 
        }        
    ]
}

 

3.2 C/C++ 파일 빌드하기

다시 cpp 파일을 열어서 ⌘(Command) + ⇧(Shift) + B 를 눌러주시면 g++로 빌드 됩니다.



inker 오류가 발생하는 경우가 생겨 이에 대한 해결법을 안내드립니다 :

main.cc 파일 빌드 시 main.cc 가 include 중인 헤더파일에 정의된 클래스의 메소드를 정의한 .cc 파일이 같이 빌드되지 않아 링크 문제가 발생하는것을 확인하였습니다.

따라서 그러한 문제를 해결하기 위해서는 tasks.json 의 내용을 다음과 같이 살짝 수정해주면 됩니다. : 

(수정된 라인 : "args :  .. "${file} 에서 ${fileDirname}/*.cpp 로 수정됨)

        {
            "type": "shell",
            "label": "g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${fileDirname}/*.cpp",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.out"
            ],
            "options": {
                "cwd": "/usr/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        },
        {
            "label": "exec",
            "type": "shell",
            "command": "${fileDirname}/${fileBasenameNoExtension}.out",
            "group": "build"
        }

args : 항목 내 -g 인자의 옵션을 ${fileDirname}/*.cc (혹은 ${fileDirname}/*.cpp) 로 수정해주시면 정상적으로 빌드됩니다.

 

 

짜짠~~~ 끝.