clangd 장점
우선 설정하기 전에, 왜 굳이 Microsoft의 C/C++ 확장이 있는데 clangd를 사용하는지 간단히 알아보자면…
clangd에는 Microsoft의 C/C++ 확장에는 없는, include 자동완성이나 inlay hint 등의 다양한 기능이 있습니다!
clangd 확장 설치
vscode의 extension marketplace (cmd + shift + x)에서 clangd를 설치해주세요.
그 다음에 아무 C/C++ 파일을 열면 clangd language server를 설치하라는 알림이 나오는데,
install 버튼을 누르면 자동으로 설치됩니다.
clangd가 이미 설치된 경우에는 해당 알림이 뜨지 않을 수 있습니다.
터미널에서 clangd --version을 입력했을 때 뭔가 나온다면 이 과정은 생략할 수 있습니다.
clangd 설치가 완료되면 Reload window 버튼을 누르면 vscode에 대한 설정은 끝납니다.
extension 추가 설정
command palette(F1, 또는 cmd + shift + P)에서 Preferences: Open Settings (JSON)으로 설정을 열어주세요.
그리고 아래 세 줄을 추가해주세요.
"clangd.detectExtensionConflicts": false, // 프로젝트별 설정인 경우 필요
"C_Cpp.autocomplete": "Disabled",
"C_Cpp.intelliSenseEngine": "Disabled",
JSON
복사
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 $@.part.json
Makefile
복사
clang의 -MJ 옵션을 사용하는 Makefile 예시
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 ']') > $@
Makefile
복사
compile_commands.json 규칙 예시
make를 한 번 실행한 이후에 -MJ 옵션으로 생성된 모든 json 파일들을 하나로 합치면 compile_commands.json을 만들 수 있습니다.