728x90
반응형

이번글에서는 윈도우 환경에서 C 언어로 작성된 프로그램을 컴파일하고 실행하는 방법에 대해 알아보겠습니다. 

리눅스 환경에서  윈도우환경에서  gcc 설치후 C 코드 컴파일하고 실행 방법에 대해 소개 하도록 하겠습니다. 

 

환경 구성

Window 10  환경에서 VS Code 와 Mingw 를 설치하도록 하겠습니다. 

  • 윈도우 10 
  • Visual Studio Code (VS Code)
  • GCC 8 (Mingw)

GCC 8설치

 

아래 경로에서 다운로드를 받습니다. 

Installer 도 있지만 설치시 제 환경에서는 에러가 발생해서 바이너리 다운로드후 압축 해제 했습니다. 

 

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

 

하단 스크롤 하면 다운로드 매뉴가 나옵니다. 

 

Download x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z (MinGW-w64 - for 32 and 64 bit Windows)

A complete runtime environment for gcc The mingw-w64 project is a complete runtime environment for gcc to support binaries native to Windows 64-bit and 32-bit operating systems.

sourceforge.net

  • 다운로드 받은 바이너리를 C Drive 에 폴더를 생성하고 압축을 해제 합니다. 
  • mingw64 -> x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z 바이너리 압축 해제 

 

윈도우 환경 변수 설정 

  • 시스템 -> 시스템 속성 -> 환경 변수 -> 환경 변수 편집 -> C:\mingw64\bin 추가 

 

GCC 설치 버전 확인 

  • Win + R 버튼 클릭후 cmd 창에서 설치 버전을 확인 합니다.
C:\>gcc --version
gcc (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


C:\>g++ --version
g++ (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


 

 

Visual Studio Code (VS Code) 설치 

아래 경로에서 Visual Studio Code 를 다운로드 받습니다. 

https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

 

 

VS Code  실행 및  C/C++ 확장 팩을 설치

  • VS code 가 설치가 완료 되었다면 c/c++ 확장팩 설치를 진행 합니다. 
  • Ctrl + Shift + x 
  • C/C++ Extension Pack

 

VS Code  C 컴파일 환경 설정 

  • Ctrl +Shift + P -> c/c++ Edit configurations 검색 -> 톱니바퀴 클릭 

 

 

gcc 컴파일 경로 설정 

  • UI 화면에서 설정을 변경 할수 있도 있고  c_cpp_properties.json 버튼을 클릭 하면 파일 에서 직접 수정 할수도 있습니다. 

 

C/C++ 환경 설정 

  • 컴파일러 경로 설정 
  • IntelliSense 모드 설정 
  • Include 경로 추가 

 

  •  c_cpp_properties.json 파일 
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "C:/Program Files (x86)/Windows Kits/8.0/Include/um",
                "C:/Program Files (x86)/Windows Kits/8.0/Include/shared",
                "C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include",
                "C:/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64",
            "browse": {
                "path": []
            },
            "compilerPath": "C:/mingw64/bin/gcc.exe",
            "compilerArgs": []
        }
    ],
    "version": 4
}

 

빌드 환경 구성 

  • F1 버튼 클릭 -> Task: Configure Default build Task 검색 
  • tasks.json 편집 (gcc 설치한 디렉토리로 설정 합니다. 
{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation": {
        "reveal": "always"
    },
    "tasks": [
        {
            "label": "save and compile for C++",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",
            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        {
            "label": "save and compile for C",
            "command": "gcc",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",
            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        {
            "label": "execute",
            "command": "cmd",
            "group": "build",
            "args": [
                "/C",
                "${fileDirname}\\${fileBasenameNoExtension}"
            ],
            "problemMatcher": []
        },
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 활성 파일 빌드",
            "command": "C:\\mingw64\\bin\\gcc.exe",
            "args": [
                "-g",
                "-lm",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "디버거에서 생성된 작업입니다."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 활성 파일 빌드",
            "command": "C:\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "디버거에서 생성된 작업입니다."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 활성 파일 빌드",
            "command": "C:\\mingw64\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-lm"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "test"
        }
    ]
}

 

C 코드 테스트 

기본 테스트 

test.c 파일 을 만들어 테스트 코드를 작성합니다. 

#include <stdio.h>
int main()
{
    printf("Hello, world!\n");
    printf("C Program Compile Test \n");
    return 0;
}

 

실행 매뉴 버튼 클릭후 테스트 코드를 컴파일 및 실행 합니다. 

  • 디버깅 없이 실행 (Ctrl+F5)

 

테스트 결과 

 

입력변수 설정을 통한 컴파일 및 실행 

  • 컴파일 후에 입력 변수 설정을 통해 실행을 할수도 있습니다. 
  • 기존에 작성했던 코드를 조금 수정 합니다. 
#include <stdio.h>
int main(int argc, char *argv[])
{
    printf("1 번째 [%s]:\n",argv[1]);
    printf("2 번째 [%s]:\n",argv[2]);
    printf("Hello, world!\n");
    printf("C Program Compile Test \n");

    return 0;
}

 

  • 테스트 프로젝트 하위 .vscode 디렉 토리 밑에  launch.json 파일을 생성 합니다. 
  • .vscode 디렉토리 에는 기존에 환경 설정한 tasks.json , c_cpp_properties.json 파일도 생성되어 있습니다. 
  • 동일 디렉토리 launch.json 파일을 만들고 환경 설정 내용을 작성 합니다. 
  • 입력 값은  "args": ["1 args ","2 args "], 형식으로 작성합니다. 

 launch.json

{
    // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
    // 기존 특성에 대한 설명을 보려면 가리킵니다.
    // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc.exe - 활성 파일 빌드 및 디버그",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\build\\${fileBasenameNoExtension}.exe",
            "args": ["1 args ","2 args "],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "gdb에 자동 서식 지정 사용",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc.exe 활성 파일 빌드"
        },    
    ]
}

 

실행 매뉴 버튼 클릭후 테스트 코드를 컴파일 및 실행 합니다. 

  • 디버깅 없이 실행 (Ctrl+F5)

실행을 하면 입력 한 변수 값도 실행시에 프로그램에 전달 할수 있습니다. 

 

 

728x90
반응형

+ Recent posts