clangd 장점

우선 설정하기 전에, 왜 굳이 Microsoft의 C/C++ 확장이 있는데 clangd를 사용하는지 간단히 알아보자면…

clangd에는 Microsoft의 C/C++ 확장에는 없는, include 자동완성이나 inlay hint 등의 다양한 기능이 있습니다!

clangd 확장 설치

vscode의 extension marketplace (cmd + shift + x)에서 clangd를 설치해주세요.

Untitled

그 다음에 아무 C/C++ 파일을 열면 clangd language server를 설치하라는 알림이 나오는데,

install 버튼을 누르면 자동으로 설치됩니다.

Untitled

clangd가 이미 설치된 경우에는 해당 알림이 뜨지 않을 수 있습니다.

터미널에서 clangd --version을 입력했을 때 뭔가 나온다면 이 과정은 생략할 수 있습니다.

Untitled

clangd 설치가 완료되면 Reload window 버튼을 누르면 vscode에 대한 설정은 끝납니다.

Untitled

extension 추가 설정

command palette(F1, 또는 cmd + shift + P)에서 Preferences: Open Settings (JSON)으로 설정을 열어주세요.

Untitled

그리고 아래 세 줄을 추가해주세요.

  "clangd.detectExtensionConflicts": false, // 프로젝트별 설정인 경우 필요
  "C_Cpp.autocomplete": "Disabled",
  "C_Cpp.intelliSenseEngine": "Disabled",

Microsoft의 C/C++ 확장과 같이 사용하기 위한 설정입니다.

프로젝트별 설정

clangd는 설정파일이 따로 없어도 잘 동작합니다.

하지만 include directory 등 별도의 설정이 있는 경우에는 compile_commands.json 파일이 필요합니다.

컴파일러로 clang을 사용한다면 clangd에서 사용하는 compile_commands.json을 쉽게 생성할 수 있습니다.

clang의 -MJ 옵션

OBJS := main.o sub1.o sub2.o
NAME := test

CC := clang

$(NAME): $(OBJS)

%.o: %.c
    $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< **-MJ [email protected]**

clang에 -MJ 옵션을 사용하면 compile_commands.json의 일부가 되는 json 파일이 생성됩니다.

compile_commands.json 규칙

.PHONY: compile_commands.json
compile_commands.json:
    -$(MAKE) --always-make --keep-going all
    (echo '[' && cat *.part.json && echo ']') > $@

make를 한 번 실행한 이후에 -MJ 옵션으로 생성된 모든 json 파일들을 하나로 합치면 compile_commands.json을 만들 수 있습니다.