개발 환경/C&C++ 개발환경

Visual Studio Code에서 C/C++ 프로그래밍 with Makefile ( Windows/Ubuntu)

webnautes 2024. 4. 6. 19:01
반응형

Windows와 Ubuntu 환경에 설치된 Visual Studio Code에서 Makefile을 사용하여 C/C++ 코드를 컴파일하고 실행시키는 방법에 대해 설명합니다. 

테스트에 사용한 운영체제 버전은 Windows 10과 Ubuntu 20.04입니다.



2020. 8. 1  최초작성

2024. 4. 6  실행 확인



유튜브 영상입니다. https://youtu.be/lGxjf3k6IwE?feature=shared 



1. C/C++ 컴파일러 설치 

1.1. Windows 

 

아래 링크에서 MinGW-W64 GCC-8.1.0 항목에 있는 x86_64-posix-seh를 다운로드합니다. 64비트 컴파일러입니다.

혹 32비트 컴파일러가 필요하면 i686-posix-dwarf를 다운로드 받으세요.  본 문서는 64비트 컴파일러를 기준으로 진행합니다.

 

https://sourceforge.net/projects/mingw-w64/files/mingw-w64/ 

 




압축을 풀어 C:\mingw64에 복사해줍니다. 

 




윈도우 키 + R을 눌러서 보이는 실행창에서 sysdm.cpl를 입력하고 엔터를 누릅니다. 

 




고급 탭을 클릭하고 아래 보이는 환경 변수 버튼을 클릭합니다. 

 




시스템 변수에서 Path를 선택하고 편집 버튼을 클릭합니다. 

 




새로 만들기 버튼을 클릭한 후.. 맨 아래에 다음 경로를 입력합니다.

 

C:\mingw64\bin

 




윈도우 키 + R을 입력 후, cmd 엔터를 눌러서 실행되는 명령 프롬프트 창에서 

다음처럼 gcc -v 명령이 실행 가능해지는지 확인하세요.

 




1.2. Ubuntu

 

build-essential 패키지를 설치하면 gcc, g++ 등 컴파일에 필요한 패키지들이 설치됩니다.

 

$ sudo apt-get install  build-essential

 

webnautes@webnautes-pc:~$ sudo apt-get install  build-essential
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
다음의 추가 패키지가 설치될 것입니다 :
  g++ g++-7 gcc
제안하는 패키지:
  g++-multilib g++-7-multilib gcc-7-doc libstdc++6-7-dbg gcc-multilib flex
  bison gcc-doc
다음 새 패키지를 설치할 것입니다:
  build-essential g++ g++-7 gcc
0개 업그레이드, 4개 새로 설치, 0개 제거 및 81개 업그레이드 안 함.
7,577 k바이트 아카이브를 받아야 합니다.
이 작업 후 25.0 M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] 




2. Visual Studio Code 설치

다음 포스팅을 참고하여 진행하세요. 



Visual Studio Code 설치하는 방법( Windows / Ubuntu )

https://webnautes.tistory.com/1841 




여기서부터는 윈도우와 우분투에서 똑같이 진행하면 됩니다.

유저 인터페이스 언어를 한글로 바꾸려면 Ctrl + Shift + P를 누르고 입력창이 보이면 dislay를 입력하고 엔터를 누릅니다.

 



Install additional languages를 선택합니다.

 



Korean Language Pack을 선택하고 초록색 Install 버튼을 클릭하여 설치합니다. 

 



설치 완료 후, 설정을 반영하기 위해 비주얼 스튜디오 코드를 종료했다가 다시 실행합니다. 



설치 완료후 Visual Studio Code를 종료했다가 다시 시작하면 유저 인터페이스가 한글로 변경됩니다. 

 




3. C/C++ 프로젝트 생성

간단히 작성한 hello.c, hello.h에서 작성한 함수 print_hello 함수를 main.c에서 불러와 사용하는 예제를 작성합니다. 

 

메뉴에서 파일 > 폴더 열기를 선택합니다. 



프로젝트를 저장할 새 폴더를 생성하고 이동 후, 폴더 선택을 클릭합니다. 



폴더 이름에 가까이 가져가면 보이는 새파일 아이콘을 클릭하여 다음 3개의 파일을 생성합니다. 

파일 생성 후 C/C++ 확장 설치를 물어보는  메시지 박스가 보이면 설치를 클릭합니다. 

 



https://bit.ly/0725-01 

hello.h

#include <stdio.h>

void print_hello();

 

https://bit.ly/0725-02 

hello.c

#include "hello.h"

void print_hello()
{
    printf("hello\n");
}

 

https://bit.ly/0725-03 

main.c

#include <stdio.h>
#include "hello.h"


int main()
{
    print_hello();

    return 0;
}



빌드하기 위해 필요한 Makefile을 작성합니다.

우분투라면 7번쨰 줄을 program에서 ./program으로 수정하세요. 

 

Makefile을 간단히 설명하면 hello.c main.c를 각각 오브젝트 파일(*.o)로 컴파일한 후, 오브젝트 파일을 합쳐서  program 실행파일을 생성합니다. 

소스 코드 컴파일 옵션을 추가하기 위해 CFLAGS 변수를 사용하며 오브젝트 파일들을 링크하여 실행파일로 만들 때 옵션을 추가하기 위해 LDFLAGS 변수를 사용합니다. 

자신의 프로젝트에 맞는 Makefile을 만들기 위해서는 Makefile 작성 방법에 대해 공부해야 합니다. 

 

https://bit.ly/0725-04 

 

CC = gcc
CFLAGS = -c -g
LDFLAGS = 
OBJECTS = main.o hello.o

run: all
program

all: program

program : $(OBJECTS)
$(CC)  $(LDFLAGS) -o program $(OBJECTS)

main.o : main.c
$(CC) $(CFLAGS) main.c

hello.o : hello.c
$(CC) $(CFLAGS) hello.c 




메뉴에서 터미널 > 기본 빌드 작업 구성을 선택합니다. 

 

템플릿에서 tasks.json 파일 만들기를 선택합니다. 

 

Others를 선택합니다. 

 

tasks.json 내용을 다음으로 교체하고 Ctrl + S를 눌러서 저장합니다.

 

윈도우즈

 

https://bit.ly/0725-06 

 

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "mingw32-make",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}




리눅스

 

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}




main.c를 열고 Ctrl + Shift + B를 누르면 컴파일 후, 프로그램이 실행됩니다. 

 



폴더창을 보면 오브젝트 파일(*.o)와 실행파일이 생성된 것을 볼 수 있습니다. 

 



hello.c 코드에서 hello 대신 hello world를 출력하도록 수정하고  Ctrl + Shift + B를 누르면 

 

#include "hello.h"

void print_hello()
{
    printf("hello world\n");
}




수정된 파일만 다시 컴파일되고 실행이 됩니다. 출력된 메시지가 hello에서 hello world로 바뀐 것을 볼 수 있습니다. 



4. C/C++ 언어 지원 설치

4-1. C/C++에 대한 문법 강조(Syntax highlighter)는 기본적으로 지원하고 있습니다. 

하지만 Visual Studio Code에서 C/C++을 제대로 사용하려면 C/C++ 확장을 설치해줘야 합니다. 

 

앞에서 아래와 같은 창이 보여 설치했다면 4.2를 건너뛰고 4.3을 진행하세요.

 




4-2. 설치 창이 보이지 않았다면

Ctrl + Shift + X를 누르거나 액티비티 바에서  확장 아이콘을 클릭 후, 입력란에 c/c++을 입력합니다. 

 




검색된 리스트에서 C/C++ 항목에 있는 초록색  설치를 클릭합니다.

 



설치한 확장을 적용시키기 위해  비주얼 스튜디오 코드를 종료시켰다가 다시 실행합니다. 



4-3. Ctrl + Shift + P를 눌러서 보이는 입력 창에 c/c++을 입력한 후, 

C/C++: 구성 편집(UI)를 선택합니다. 

 



4-4. IntelliSense 구성이 보입니다.  윈도우의 경우 4-5를 우분투의 경우 4-6을 진행하세요. 

 

4-5. 윈도우의 경우 컴파일러 경로에 3개의 컴파일러가 인식되어 있습니다. 

 




사용하는 언어에 따라 gcc.exe 또는 g++.exe를 선택해줍니다. 헤더파일 인식하여 작성한 코드에 유용한 정보를 제공하기 위해 필요한 작업입니다. 

 




4-6. 우분투의 경우에도 컴파일러들이 인식됩니다. 

사용하는 언어에 따라 gcc.exe 또는 g++.exe를 선택해줍니다.

 




4-7. 윈도우/우분투 공통부분입니다. IntelliSense 모드로 gcc-x64를 선택합니다.

 




4-8. 설정이 자동으로 저장되므로 현재 탭을 닫아도 됩니다. 

 




5. 한글 입출력 예제 

 

6-1. 리눅스 환경이라면 별다른 설정 변경없이 진행가능합니다. 7번을 진행하세요.

 

아래처럼 진행했는데 한글이 깨지는 경우 윈도우를 업데이트 해보세요..

 

메뉴에서 파일 > 기본설정 > 설정 을 선택합니다.

encoding을 검색하여 Encoding 항목을 euckr로 변경합니다.

 



다음 예제를 main.c로 저장하여 실행시켜보면 

 

#include <stdio.h>

int main()
{
    printf("문자열을 입력후 엔터를 누르세요!\n");

    char a[256];
    scanf("%s", a);

    printf(" \" %s \" 를 입력하셨네요.\n", a);
    return 0;
}



다음처럼 코드에 입력한 한글 문자열 출력과 입력한 문자열에 대한 출력이 모두 정상인 것을 볼 수 있습니다.

 




반응형