반응형

윈도우에서 간단한 테스트 코드를 작성할 때 사용할 수 있는 MinGW와 Sublime Text 3를 사용한 간단한 개발 환경 만드는 방법을 다룹니다.

EUC-KR 인코딩 때문에 프로그램 실행시 한글이 깨지는 문제 해결 방법도 다루고 있습니다.




1. MinGW 설치


2. Sublime Text 3 설치 및 설정


3. 예제 코드 실행


4. 한글 문제 해결





2018. 6. 18 -  최신 버전으로 테스트 및 수정

2018. 7.  2 - MinGW 설치 방법 분리

2018. 7. 23 - 한글 입출력 문제 해결 방법 추가



1. MinGW 설치


아래 링크에서 다운로드 받아 설치하세요.

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



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


윈도우용 gcc, g++ 컴파일러를 사용하기 위해 MinGW 설치하는 방법

http://webnautes.tistory.com/1196




2. Sublime Text 3 설치 및 설정

2-1. http://www.sublimetext.com/3 에서 Sublime Text 3을 다운로드 받아 설치합니다.





2-2. Sublime Text 3의 메뉴에서 Tools > Build System > New Build System을 선택합니다.




2-3. 다음 내용을 복사해서 붙여넣기합니다.

출처 - https://stackoverflow.com/a/27509303


g++해도 C언어도 컴파일이 잘되나.. 혹시 문제가 생기면 gcc로 변경하세요.


{
   "cmd": ["g++", "${file}", "-o", "${file_base_name}.exe"],
   "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
   "working_dir": "${file_path}",
   "selector": "source.c, source.c++",
   "shell": true,

   "variants":
   [
       {
           "name": "Run",
           "cmd": ["start", "cmd", "/k", "${file_path}/${file_base_name}.exe"],
           "shell": true
       }
   ]
}




2-4. Ctrl + S를 누르고 cpp.sublime-build로 저장합니다.





3. 예제 코드 실행


3-1. 단축키 Ctrl + N을 누르거나 메뉴에서 File > New File를 선택하고 다음 코드를 복사해서 붙여넣습니다.


#include <iostream>

using namespace std;

int main()
{
   char buf[256];

   cout << "한글을 입력하고 엔터를 눌러보세요." << endl;
   
   cin >> buf;
   cout << "->" << buf << endl;

   return 0;
}




3-2. Ctrl + S 키를 눌러서 확장자가 cpp인 파일 이름으로 저장합니다.





3-3. 메뉴에서 Tools > Build With를 선택하거나 Ctrl + Shift + B를 누릅니다.

메뉴에서 cpp를 선택하면 컴파일이 진행됩니다.





문제 없으면 창 아래쪽에  Finished 라는 메시지가 보입니다.





3-4. 다시 메뉴에서 Tools > Build With를 선택하거나 Ctrl + Shift + B를 누릅니다.

메뉴에서 cpp - Run을 선택하면 프로그램이 실행됩니다.  





별도의 명령 프롬프트 창에 실행결과가 보입니다.

입력한 단어 “한글” 외에는 모두 깨져보입니다. 입력 받은 글자를 출력해주지도 못합니다.




다음 장에서 이 문제를 해결하는 방법을 소개합니다.




4. 한글 문제 해결


4-1. Ctrl + ` (왼쪽 탭키 위에 있는 키)를 누르거나 메뉴에서 View > Show Console 선택하면 하단에 콘솔창이 열립니다.





4-2.  https://sublime.wbond.net/installation  에서 SUBLIME TEXT 3 탭 아래에 있는 텍스트를 드래그 후 복사합니다.





4-3. 아래 캡쳐 화면에서 보이는 빨간 사각형으로 표시한 입력창에 붙여 넣기 하고 엔터를 누릅니다.




잠시 후 콘솔창에 아래 캡쳐 화면처럼 메시지들이 보이게 됩니다.





4-4.  Ctrl + Shift + P를 입력하고 입력 창에 Install을 입력하면





Package Control:Install Package가 보입니다. 이 항목을 선택합니다





4-5. 입력창에 convert 입력하면 보이는 ConvertToUTF8을 선택합니다.





설치가 완료되기를 잠시 기다립니다.





4-6. Ctrl + N을 눌러서 새로운 파일열고 다음 코드를 복사해줍니다.


#include <iostream>

using namespace std;

int main()
{
   char buf[256];

   cout << "한글을 입력하고 엔터를 눌러보세요." << endl;
   
   cin >> buf;
   cout << "->" << buf << endl;

   return 0;
}




4-7. Ctrl + S를 누르고 확장자가 cpp인 파일로 저장합니다.





4-8. 메뉴에서 File > Set File Encoding to > Korean(EUC-KR)을 선택하고 Ctrl + S를 눌러 다시 저장합니다.




4-9. Ctrl + Shift + B를 눌러 다시 컴파일 및 실행을 해보면 한글 입력 및 출력이 잘되는 것을 확인할 수 있습니다.




반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. 13 2017.11.27 15:29

    잘보고 갑니다.

  2. Jameswic 2018.07.16 09:06

    감사합니다 덕분에 잘설치되었습니다.

  3. 23 2018.07.22 19:22

    영어는 실행이 잘 되는데 한글로 하면 한글이 깨져서 나옵니다ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.07.23 19:51 신고

      포스팅에 추가했습니다. "4. 한글 문제 해결"을 참고하세요..

  4. 빨강마티즈 2018.11.13 06:48

    잘보고 갑니다. 한번에 따라하기 성공했습니다.^^

  5. 감사합니다! 2018.11.28 02:21

    감사합니다 덕분에 아무 문제없이 잘 설치했습니다

  6. HK31 2019.04.12 01:22

    감사합니다! 많은 도움이 됐습니다~~

  7. 농구곰 2019.05.02 18:09

    예제를 해보다가 오류가 발생하여 질문드립니다
    3-4에서 cpp-run을 한다음 'C:\Users\user\Desktop\졸작/hello.exe'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
    배치 파일이 아닙니다. 이렇게 뜨면서 오류가 나는데 어떻게 해야하나요???

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.02 18:14 신고

      경로에 한글이 있어서 문제일수 있으니 파일 위치를 바꾸어보세요

  8. 농구곰 2019.05.02 18:40

    C:\Users\user/hello.exe'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
    배치 파일이 아닙니다.

    파일 위치를 바꿔도 이렇게 오류가 납니다 ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.02 20:24 신고

      지금 다시 보니 Tools > Build System를 Automatic으로 해도 동작하는 군요..

      테스트해보세요.


  9. 농구곰 2019.05.04 10:48

    설정이 Automatic으로 돼있는데도 안되네요 ㅠㅠ
    cpp 설정할때 이렇게 뜨는데 맞는건가요??
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x24): undefined reference to `std::cout'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x29): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x30): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x37): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x4b): undefined reference to `std::cin'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x50): undefined reference to `std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*)'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x5f): undefined reference to `std::cout'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x64): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x78): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x7f): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0x86): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0xa6): undefined reference to `std::ios_base::Init::~Init()'
    C:\Users\user\AppData\Local\Temp\ccyaZDeh.o:hello.cpp:(.text+0xc7): undefined reference to `std::ios_base::Init::Init()'
    collect2.exe: error: ld returned 1 exit status
    [Finished in 0.7s]

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.04 10:51 신고

      명령프롬프트에서 g++ 파일이름.cpp -o main 으로 컴파일되나보세요.
      문제가 있다면 mingw 설치가 잘못된것입니다.

  10. 농구곰 2019.05.04 11:35

    명령 프롬프트에 뭐라고 명령어를 써야하나요???
    g++.cpp -o main라고 쓰면 되나요???

  11. 농구곰 2019.05.04 11:49

    질문이 많은데 답변 잘해주셔서 감사합니다.
    학부 초보자인데 작품 만드려다 보니 참고를 많이 하게되어서요 ㅠㅠ
    비쥬얼스튜디오에서 main.cpp를 생성후 해야한다는 건가요???

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.04 11:50 신고

      명령프롬프트 실행하면 보이는 경로를 탐색기로 이동하여 메모장으로 작성하면됩니다.

  12. 농구곰 2019.05.04 12:02

    C:\Users\user>g++ main.cpp -o main
    g++: error: main.cpp: No such file or directory
    g++: fatal error: no input files
    compilation terminated.
    이렇게 떠서 c드라이브 user에 들어가 메모장을 main.cpp로 만들긴 했는데 작동이 안됩니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.04 12:05 신고

      dir 명령을 입력해서 main.cpp 이름을 확인해보면 main.cpp.txt로 되있을듯합니다.

      맞다면 다음 명령으로 이름을 바꾸고 다시 g++로 컴파일 해보세요.
      rename main.cpp.txt main.cpp

  13. 농구곰 2019.05.04 13:07

    C:\Users\user>g++ main.cpp -o main
    c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
    collect2.exe: error: ld returned 1 exit status

    main.cpp 바꾸고나서 다시 명령 프롬프트에 실행하였더니 이렇게 에러가 납니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.04 13:10 신고

      이상하군요..기존에 설치한 mingw 삭제하고 다음 링크에서 64비트용 설치후 해보세요.

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

  14. 농구곰 2019.05.04 13:12

    네 다시 깔아보고 해보겠습니다
    답변 잘해주셔서 감사합니다!!!

  15. 농구곰 2019.05.04 13:27

    메모장에 아무것도 안적고 main.cpp로 c드라이브에 저장했는데
    webnautes 님이 말씀한것처럼 main.cpp.txt로 돼 있어서 명령 프롬프트에 rename main.cpp.txt main.cpp를 쓰니
    main.cpp파일로 저장되 있더군요 그래서 다시 g++ main.cpp -o main를 명령하니
    c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
    collect2.exe: error: ld returned 1 exit status 이런 에러가 떳습니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.04 13:28 신고

      그래서 에러가 났군요.. 3-1에 있는 코드를 파일에 복사해줘야 합니다.

    • 농구곰 2019.05.04 13:33

      아 메모장에 3-1을 복사후 그다음 main.cpp를 만들어야 하는군요
      앗앗 다시해봐야겠습니다
      감사합니다!!!!

  16. 농구곰 2019.05.04 13:31

    MinGW 다시 깔고 있는데 원래 블로그에서 설명하신 설치 방법에는 MinGW - Windows 용 미니멀 GNU를 설치하라고 하셨는데
    지금 알려주신 파일은 MinGW-w64 - 32 비트 및 64 비트 Window 인데 다른 파일인가요???

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.04 13:35 신고

      윈도우가 32비트면 32비트 윈도우가 64비트면 64비트를 설치하세요

  17. 김영빈 2019.07.07 17:42

    안녕하세요 sublime text3 잘 설치했습니다.

    혹시 반복문(for, while 등..)을 실행하면 한번만 실행되고 종료되는 이유를 알고 계신가요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.07.07 19:30 신고

      mingw를 다음 링크에 있는 걸로 바꾸어 설치해보세요

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

+ Recent posts