맥 visual studio로는 C++ 개발을 할 수 없습니다. 닷넷밖에 못합니다. 좀 거지같습니다.

꿩대신 닭으로 vscode로 C++ 개발환경을 세팅해보겠습니다.

 

맥 vscode C++ 세팅 방법

먼저 clang, lldb가 설치되어 있어야 합니다 (디버그 안할거면 lldb 없어도 상관X)

맥에는 기본적으로 설치되어 있으니 패스하겠습니다

다음으로는 C/C++ 확장을 설치합니다.

그 다음, code runner 확장도 설치합니다.

이걸 설치하는 이유는, C/C++ 확장 지원이 매우 거지같기 때문입니다

(ex. "Run without debugging" 기능 추가해달라고 2017년에 이슈가 올라왔으나 3년 넘게 진전이 없음. github.com/microsoft/vscode-cpptools/issues/1201)

이건 옵션인데, Output 패널이 아닌 Terminal에서 코드가 실행되게 하려면, 설치한 뒤 Settings에서 Code-runner의 "Run In Terminal" 설정을 체크해줍니다.

settings.json을 열어서 code-runner.executorMap을 위와 같이 설정합니다.

기본값은 g++이면서 std 버전이 들어가 있지 않기 때문에 std=c++17 옵션을 넣어 줘야 합니다.

맥에서는 사실 g++이 clang++의 짭 링크이기 때문에 안바꿔도 상관은 없으나 혼란스러울 수 있으니 그것도 같이 수정해줍니다.

그 다음, cpp 프로젝트를 적당히 만들고 난 뒤 Terminal - Configure Default Build Task로 들어갑니다

여기선 clang++을 선택해줍니다

그럼 이렇게 tasks.json 파일이 생성됩니다. 빌드 + 디버그할 때는 이 설정을 사용하게 되고, 인텔리센스도 이 tasks.json 파일에 기반해 동작합니다.

중간에 args 부분에 "-std=c++17"처럼 c++ 버전을 입력해줘야 최신 문법을 사용할 수 있습니다.

 

자 이제 세팅은 거의 끝났습니다. 디버그 세팅을 해봅시다

F5를 눌러서 Debugging을 실행합니다

Select Environment -> C++(GDB/LLDB) 선택합니다

뭔 차이인지 모르겠는데 적당히 clang++중에 하나 골라줍니다.

launch.json이 생성됐고 딱히 수정할 건 없습니다.

⚠️ 여기서 주의할 점은 launch.json의 preLaunchTask와 tasks.json에서 task의 label이 일치해야 한다는 점입니다. 만약 뭔가 안되면 이걸 확인해주세요

 

실행 및 디버그

#include <iostream>
#include <vector>
#include <string>
#include <cstdio>

using namespace std;


int main() {
	vector<string> vec {"abc", "def", "ghi"};

	if (const auto it = find(begin(vec), end(vec), "abc");
		it != end(vec)) {
		*it = "$$$";
	}

	for (const auto& s: vec) {
		cout << s << "\n";
	}

	return 0;
}

자 이제 c++17 문법이 들어간 cpp 파일을 만들어서 실행시켜봅시다

 

Cmd+Shift+P - Run By Language - cpp 선택한 다음, Option+Control+n(>Run Code)으로 코드를 빌드 + 실행 할 수 있습니다.

 

디버그를 하려면 breakpoint를 찍고, F5를 누르면 됩니다.

주의할 점은 실행파일이 Desktop, Document 등의 영역에 있으면 디버그를 할 때마다 권한을 요구하는 매우 귀찮은 일이 발생하니, 그냥 홈 디렉토리나 그런 곳에 옮겨두는게 좋습니다.

 

후.. 참 손이 많이 가네요. 어쨌거나 잘 동작합니다

 

m1 mac의 경우

+ 2024. 1. 5.
vscode-cpptools 1.9.3 버전부터 M1 mac에서 Native debugging이 지원되니 아래 내용은 선택사항입니다
(참고: https://github.com/microsoft/vscode-cpptools/issues/7035#issuecomment-1063517587)

 

m1 맥(apple silicon arm64 architecture) 같은 경우, 빌드와 실행은 잘 되지만 디버그는 안됩니다. 왜냐면 vscode-cpptools에서 아직 지원하지 않기 때문입니다...

그럼 디버그를 포기해야 하느냐? 방법이 있습니다.

먼저 CodeLLDB extension을 설치합니다.

그 다음 launch.json에서 "type": "lldb"로 수정해줍니다. 원래는 "cppdbg"로 되어 있었을 겁니다.

자 이렇게 하면 m1 맥에서도 c++ 디버거를 사용할 수 있습니다.

 

+ cpp 파일이 여러개일 때

위 설정들은 main이랑 여러 구현부가 main.cpp 하나에 들어가있을 때만 세팅한건데요, 왜냐면 저는 최근에는 알고리즘 문제풀 때 빼고는 C++을 쓰지 않기 때문에 이걸로 족하기 때문입니다

만약 구현부가 여러파일에 나눠져 있다면 설정파일을 좀 수정해줘야 합니다. main 파일 하나만 컴파일하면 링크 에러가 나옵니다.

1. settings.json -> code-runner.executorMap에서 $fileName 부분을 *.cpp로 바꿔줍니다

이렇게 하면 코드러너로 실행시킬 때 cpp파일을 전부 포함해 컴파일합니다

2. tasks.json args에 ${file} 대신 ${fileDirname}/**.cpp 로 수정해줍니다. (hpp 파일 있으면 그것도 추가해줍니다)

이렇게 하면 디버그도 정상 동작합니다

 

+ 잘 안되는 경우

뭔가 잘 안되는 경우 일단 launch.json / tasks.json을 지우고 다시 만들어보세요

launch.json은 run and debug 메뉴에서 만들 수 있습니다

tasks.json은 상단 메뉴 Terminal - Configure default build task로 만들 수 있습니다

 

반응형