Visual Studio Code, Clang C언어 컴파일(Windows)
목차
- 소개
- LLVM/Clang 툴체인 및 Visual Studio 설치
1) 설치 위치 확인
2) 환경 변수 설정 확인
3) Visual Studio C++ 설치 - Visual Studio Code 설정
1) C언어 확장 설치
2) Tasks.json 작성하기
3) Launch.json 작성하기
4) 바로 가기 키 설정 - 기타 설정 지원 팁
1) 디버깅 시, 디스어셈블리 내용 표시하지 않기
2) Clang-format
1.소개
이 글에서 소개하고 있는 내용은 제가 알고 있는 정보 또는 여기저기 찾은 정보를 바탕으로 종합하여 작성하였습니다. 잘못된 정보 또는 더 나은 정보가 있다면 알려주시면 감사하겠습니다. 확인 후에 반영하도록 하겠습니다.
이 글에서는 GNU Compiler Collection(GCC)가 아닌 LLVM/Clang과 Visual Studio Code로 C언어를 컴파일 할 수 있는 환경을 구성하도록 하겠습니다.
Visual Studio Code를 이용해서 C언어 개발을 진행할 수 있습니다만, Windows 환경에서는 훨씬 강력한 IDE인 Visual Studio가 있기 때문에 전문적으로 개발하기를 원하신다면, Visual Studio를 이용하시거나, JetBrains CLion을 이용하시는 편이 좋습니다.
저는 컴퓨터 공학 기초와 C언어 기초 이해를 위해서 가벼운 C언어 컴파일 환경 구성을 위해 Visual Studio Code로 컴파일 할 수 있는 환경을 구성하였습니다.
Windows에서 LLVM/Clang을 이용하기 위해서는 역설적이게도 Visual Studio의 C++ 부분을 설치해야 합니다. 이 글에서는 C언어의 프론트엔드로 LLVM/Clang을 사용하고, 빌드 툴로 MSVC를 사용합니다.
LLVM/Clang 툴체인은 C++ 또한 지원합니다만, 이 글에서는 C언어를 기준으로만 작성되었습니다.
- LLVM/Clang 툴체인 다운로드
https://releases.llvm.org- 다운로드로 이동하면 종류가 많이 있습니다. "LLVM-xx.xx.xx-win64.exe"를 받으시면 됩니다.
- Visual Studio 설치
Visual Studio
2.LLVM/Clang 툴체인 및 Visual Studio 설치
1) LLVM/Clang 설치 시 PATH 추가
설치 중 "Add LLVM to the system PATH for all users"를 추가하면 설치가 완료된 이후 Windows 환경 변수에 자동으로 추가됩니다.
2) Visual Studio 설치 시 C++ 체크
Visual Studio 설치 시, "C++를 사용한 데스크톱 개발"을 체크하면 됩니다.
3) LLVM/Clang 설치 위치 확인
기본적으로 LLVM/Clang 설치 위치를 변경하지 않으셨다면 기본 디렉토리에 설치됩니다.
- 기본 디렉토리 "C:\Program Files\LLVM"에 설치되며, Clang.exe 등은 bin 폴더에 위치합니다.
다른 위치로 선택하셨다면 해당 위치를 기억해 주시기 바랍니다.
4) 환경 변수 설정 확인
만약 설치하실 때에 2-1)의 "Add LLVM to the system PATH for all users"를 선택하지 않고 지나치셨다면, 직접 추가하실 수 있습니다.
Windows 시작 메뉴에서 "환경 변수" 검색 -> "시스템 환경 변수 편집" -> 환경 변수(N) -> 시스템 변수(S)의 PATH 선택 -> 편집(I) -> 목록 확인
위의 "환경 변수 편집" 스크린샷에 나온 것 처럼, LLVM/Clang의 bin 폴더가 PATH에 등록되어 있지 않다면, 오른쪽의 "찾아보기(B)"를 클릭하여 설치한 위치를 직접 선택해 주시면 됩니다.
모두 설치를 완료하고, 환경 변수 편집까지 마친 이후에 재부팅을 해주시기 바랍니다.
재부팅 이후, 명령 프롬프트(cmd) 또는 파워쉘(Powershell) 등을 이용하여 "Clang -v" 를 입력하여 LLVM/Clang 버전이 나오는지 확인해 주시기 바랍니다.
위와 같이 clang 버전 정보가 확인된다면 정상적으로 설치가 완료된 것 입니다.
3. Visual Studio Code 설정
1) C언어 확장 설치
Visual Studio Code에서 C언어 및 C++ 확장과 디버그를 위해 CodeLLDB 확장을 설치합니다.
- 설치할 확장 목록
- C/C++
- C/C++ Themes
- C/C++ Extension Pack (이 확장만 설치하면, C/C++와 C/C++ Themes가 함께 설치됩니다.)
- CodeLLDB
확장까지 모두 설치가 완료된 이후에 Hello, world! 코드를 작성하여 잘 적용되었는지 확인합니다.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
}
2) Tasks.json
Visual Studio Code에서 C언어를 컴파일하기 위해 기본 빌드 작업 구성을 진행합니다.
자동으로 "C/C++: clang.exe 활성 파일 빌드"가 확인된다면, 선택하시면 됩니다.
만약, 자동으로 확인되지 않는다면, 직접 수정할 수 있기 때문에 다른 것을 선택하셔도 무방합니다.
선택을 하고 나면, 작업 폴더에 ".vscode" 폴더가 새로 생성되며, 그 안에 Tasks.json 파일이 함께 생성됩니다.
Tasks.json 파일의 내용을 아래의 내용으로 수정합니다.
기본적인 컴파일 기능 외에 C언어 표준 및 진단 출력 메세지 형식, 최적화 등의 기능을 추가하였습니다.
주석에 해당 내용들을 변경할 수 있도록 정보를 추가하였습니다. 필요하신 경우에 직접 변경하시기 바랍니다.
예를 들어, 현재 이 Tasks.json은 C23을 표준으로 하고 있습니다. 호환성을 위해 C11 등으로 변경하고자 하신다면, *"-std=c23"*을 c11로 변경하여 저장하시기 바랍니다.
아래의 Tasks.json은 c23 표준을 사용하며, 컴파일 최적화 옵션인 -O2를 적용한 상태입니다.
{
"version": "2.0.0",
"runner": "terminal",
"type": "shell",
"echoCommand": true,
"presentation": { "reveal": "always" },
"tasks": [
// Clang Compile Task for Windows
// Customized By Graf von Razorbacks
// Windows용 LLVM/Clang
{
"label": "Clang Compile", // 작업 실행 이름
"command": "clang",
"args": [
"-std=c23", // C언어 표준 (c89, c99, c11, c17, c23)
"-fdiagnostics-color=always",
"-fdiagnostics-format=msvc", // 진단 출력 메세지 형식 (clang, msvc, vi)
"-fcolor-diagnostics",
"-fansi-escape-codes",
"-g", // 디버그 정보 (-g0, -g1, -g, -g3)
"-O2", // 최적화 (-O0, -O2, -O3)
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\Program Files\\LLVM\\bin" //LLVM/Clang 바이너리 위치
},
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": "$gcc",
"detail": "Compiler : Clang | C:/Program Files/LLVM/bin/clang.exe"
},
]
}
3) Launch.json
Tasks.json까지 모두 완료하셨다면, 디버그 및 실행 작업을 진행해야 합니다.
디버깅 시작을 누르면, 디버거를 선택하는 화면이 나옵니다. 이 때, C++(GDB/LLDB)를 선택하시면 됩니다.
이런 오류가 발생하는 경우에는 "'launch.json' 열기"를 클릭합니다.
그럼 이번에는 *".vscode"* 폴더 아래에 Launch.json이 생성됩니다.
이 Launch.json 파일을 아래의 내용으로 교체합니다.
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Active File",
"targetArchitecture": "x86_64",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"miDebuggerPath": "C:\\Program Files\\LLVM\\bin\\lldb.exe"
}
]
}
모두 적용이 완료된 이후, 터미널 메뉴에서 *"작업 실행"*을 클릭하시고, "Clang Compile" 을 선택하시면 컴파일이 진행됩니다.
성공!!!
바로, F5를 눌러서 실행을 해볼 수도 있고, 실행 메뉴에서 디버그 실행을 진행하셔도 됩니다.
축하합니다!
LLVM/Clang 툴체인을 이용하여 Visual Studio Code에서 C언어 컴파일을 완료했습니다.
4) 바로 가기 키 설정
더 사용하기 쉽게 하기 위하여 바로 가기 키를 등록할 수 있습니다.
Visual Studio Code 에서 Ctrl + K 후 Ctrl + S 를 누르면 바로 "바로 가기 키" 설정 화면이 나옵니다.
또는, 파일 메뉴에서 기본 설정 -> 바로 가기 키 선택하셔도 동일한 화면을 확인하실 수 있습니다.
바로 가기 키 설정 화면에서 오른쪽 상단의 *"바로 가기 키 열기(JSON)"* 을 클릭한 후에 아래 내용을 추가하시면 됩니다.
아래의 키는 Ctrl + F10 단축키를 누르면 Clang Compile 작업이 실행되도록 설정합니다.
원하시는 단축키가 있다면 수정하시면 되며, 다른 단축키와 겹치지 않도록 설정하시기 바랍니다.
디버그는 "F5" 기본 단축키로 진행하시면 됩니다.
{
"key": "ctrl+f10", // 컨트롤 + F10 으로 컴파일 실행
"command": "workbench.action.tasks.build"
},
4. 기타 설정 팁
1) 디버깅 시, 디스어셈블리 내용 표시하지 않기
CodeLLDB를 이용하여 디버깅을 진행하면 프로시저 단위로 진행하던 중에 어셈블리 내용이 표시되는 경우가 있습니다. 어셈블리 내용을 확인하면서 디버깅을 하시는 경우에는 유용할 수 있으나, 입문자 또는 초보자에게는 어려운 내용이기 때문에 보이지 않도록 설정할 필요가 있습니다.
Visual Studio Code 기본 설정 화면에서 "Assembly" 라고 검색을 하면, *"Lldb: Show Disassembly"* 라는 설정을 확인할 수 있습니다.
이 설정을 "never"로 설정하면, 디버깅 시에 어셈블리 내용이 표시되지 않습니다.
자세히 보기 : 비주얼 스튜디오 코드 C언어 디버깅 시, 어셈블리 비활성화
2) Clang-format
Visual Studio Code를 통해 C언어의 포맷, 즉 문서 서식을 변경할 수 있습니다.
코드 자체는 실행하는데에 문제가 전혀 없지만, 기업별로, 개발자별로 선호하는 취향 차이가 분명히 존재하는 부분이기 때문에 여러 사람과 함께 개발함에 있어서 코드 포맷은 굉장히 중요한 부분입니다.
또한, 입문하는 시기에 코드 서식 기준을 잡고 시작한다면, 규칙적인 코드 스타일을 익힐 수 있고, 다른 사람의 코드를 확인하거나, 디버그를 하는 경우에도 읽힘의 정도에 있어서 익숙함의 차이가 있기 때문에 서식을 미리 정하여 작성하는 것이 도움이 될 수도 있습니다.
Visual Studio Code 기본 설정에서 "Clang" 을 검색하시면, 여러 개의 설정이 나오는데, *"C_Cpp: Clang_Format_fallback Style"* 스타일의 내용을 확인하시고 원하는 포맷을 선택하실 수 있습니다.
또, 특별히 원하는 경우, 직접 코드 포맷을 정하실 수도 있습니다.
미리 제공되는 대표적인 코드 포맷으로는 Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, Microsoft, GNU 등이 있으며, 이 중에 원하시는 것을 입력하시면 됩니다.
자세히 보기 : C/C++ 코드 포맷 비교 / Clang-format