ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 윈도우 C/C++ 개발 환경 구축
    개발환경 구축 2023. 2. 14. 22:50

    1.컴파일러 설치

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

    여기에서 minGW -w64를 다운 받아 설치하려고 하니

    이렇게 자꾸 오류가 떠서 수동으로 설치하였다. 저 프로그램은 컴파일러 통합 설치 프로그램에 불과하니 안에 있는 컴파일러를 수동으로 설치해도 상관없을 것이다.

     

    https://www.mingw-w64.org/

     

    MinGW-w64

     

    www.mingw-w64.org

    공식 사이트 좌측 탭에 다운로드를 클릭하고, 페이지를 쭉 내려보면, SourceForge라 적혀있는 하이퍼링크를 누른다.

    다시 스크롤을 많이 내리면 이렇게 수동으로 다운로드 할 수 있는 링크가 있다. 언제가부터 win10 이면 모두 64비트가 되었으니 64비트 컴파일러를 다운받으면 된다. 가장 일반적으로 사용되는 것 같은 x86_64-posix-seh를 다운로드 하였다. 이후 압축 풀어 원하는 폴더에 옮기면 된다.

     

    혹시 다시 minGW 사이트 디자인이 바뀔 수 있으니 다이렉트 링크를 남긴다.

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

     

    MinGW-w64 - for 32 and 64 bit Windows - Browse /mingw-w64/mingw-w64-release at SourceForge.net

    A platform built for a new way of working The Work OS that lets you shape workflows, your way

    sourceforge.net

     

    • 추가) 좀더 높은 버전의 컴파일러(GCC/G++ 12.2)를 구글링으로 찾았다. 설치 방법은 같으며 clang 컴파일러도 포함되어 있다.

    https://winlibs.com/

     

    WinLibs - GCC+MinGW-w64 compiler for Windows

    WinLibs standalone build of GCC and MinGW-w64 for Windows Jump to:   Download | How to use from Windows Command Prompt | How to use from Code::Blocks | Philosophy What is it? In short: it's a free C and C++ compiler for Microsoft Windows. GCC (GNU Compile

    winlibs.com

     

     

     

     

    압축 푼 폴더를 열고 mingw64 -> bin로 이동하면, gcc랑 g++ 컴파일러가 보인다.

    이렇게 입력하면 현 폴더 위치로 cmd가 열려서 cd로 이동하는 수고를 덜 수 있다.

    gcc -v와 g++ -v가 제대로 작동하는 것을 확인할 수 있다. 시스템 환경변수에 컴파일러 경로를 입력하면, 매번 cd로 컴파일러 디렉터리로 이동할 필요 없이 g++를 작동시킬 수 있다.(버전만 간략하게 보고 싶다면 g++ --version)

     

    참고로 cmd 창에서는 g++ 라고 명령어 처럼 입력하지만 cmd에 g++를 입력하면 컴퓨터는 g++라는 이름의 실행 파일(g++.exe)를 찾게 된다. 이때 cmd를 실행시킨 위치와 Path라는 변수에 등록된 경로가 검색 대상이 된다. 만약 환경변수 등록을 하지 않았다면 컴파일 하기 위해서 g++대신 D:\2.Program\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64\bin\g++.exe -v 라고 입력을 하거나 cd 명령어로 디렉터리를 왔다갔다 해야된다. 자바의 java 역시 자바 가상머신의 위치가 환경변수에 등록되있기 때문에 cmd에 java라고 쓸 수 있는 것이며, 파이썬의 py도 인터프리터 위치가 환경변수에 등록되 있기에 이렇게 편하게 쓸 수 있는 것이다.

     

    탐색기에서 내PC를 우클릭 -> 속성 -> 고급 시스템 설정 -> 환경 변수를 누른다.

    여기서 사용자 변수는 현재 로그인 한 계정에서만 접근할 수 있는 경로값이며, 시스템 변수는 여러 계정에서도 접근할 수 있는 경로값이다. PC를 본인만 사용한다면 둘 중 어디에 추가를 하든 상관없다.

     

    그냥 새로 만들기 눌러 추가하면 안되고, Path라는 이름의 변수를 편집해야 한다.

    아까 폴더에서 상단 바를 클릭해 주소를 복사하고, 새로만들기를 눌러 붙여넣는다. 이후 확인을 눌러줘야 시스템에 적용된다.

    시스템 환경변수에 제대로 컴파일러 경로가 추가되었다면, cmd, powerShell, git 등 다른 콘솔에서도 gcc/g++를 실행시킬 수 있다. 리눅스와 유사한 환경에서 개발을 원한다면 cmd 대신 git을 사용하면 된다. 

     

    참고로 test.exe를 컴파일 하였을 때 cmd에서는 그냥 test or test.exe라고 입력하면 출력을 할 수 있지만, git을 비롯한 리눅스에서는 ./test라고 입력을 해야 출력을 볼 수 있다.

     

    터미널에서 컴파일 하기

    g++ -o {오브젝트 파일 경로} {소스파일들 경로}
    
    #같은 폴더 내에 있다면 이름+확장자만 입력하면 됨
    g++ -o test.exe main.cpp
    
    #소스 파일이 여럿인 경우
    g++ -o test.exe main.cpp math.cpp
    
    #위에처럼 컴파일 하면 프로젝트 크기가 클 때 컴파일 하는데 오래 걸리니 파일 별로 빌드 할 수도 있음
    #-c는 컴파일만 한다는 의미
    g++ -c -o main.o main.cpp
    g++ -c -o math.o math.cpp
    g++ -o test.exe main.o math.o
    
    #소스파일을 모두 적은 후 컴파일러에 여러 명령을 전달할 수 있음
    g++ -o test.exe main.cpp -std=c++20 -O2
    
    #절대 하지 말아야 될 실수
    g++ -o main.cpp main.cpp
    #빌드한 뒤, 빌드한 바이러니를 main.cpp에 저장해버려서 작업한 게 날아감

    참고로 VScode에서 ctrl+`(TAB 키 위에 있음)을 눌러 터미널을 열 수 있으며(새 터미널열기는  ctrl+shift+`), 아래와 같이 탐색시 창에서도 명령어를 실행시킬 수 있다.

    /c 대신 /k를 사용하면 cmd 창이 안닫히기 때문에 이렇게 ui가 없는 프로그램을 실행하는데 쓸 수 있다.

     

    2.VScode 설정

    확장 탭에서 C/C++ 확장 기능과 Makefile, CMAKE 확장을 설치한다. 아두이노 확장 기능까지 설치하면 시리얼 모니터도 볼 수 있다.

    ctrl+,를 눌러 설정창을 열고 확장 -> c++ 탭으로 이동한다.(코드 화면에서 ctrl+, 누르면 안열린다. 코드 창이 아닌 다른 데를 클릭 한 뒤 단축키를 입력해야된다.)

     

    1.컴파일러 경로 설정

    (환경 변수에 추가해주었던 컴파일러 경로)\g++.exe를 입력한다.

     

    2.Intelli Sense Mode

    MinGW-W64 GCC-8.1.0를 다운 받았으니 gcc로 설정해준다.

     

    3.터미널 설정

    F1 or ctrl+shift+P를 누르고, terminal:select d 정도만 입력하면 저 옵션이 보이는데 클릭 or 엔터키 누른 뒤 쓰고 싶은 터미널을 선택하면 된다.

     

    기타

    • 혹시 한글 출력이 깨진다면 인코딩을 UTF8에서 EUC-KR로 바꾸면 된다.

     

    3.VScode 컴파일 및 디버그 방법

    적당히 테스트 코드를 만든 뒤, 좌측 상단에 화살표 버튼을 눌러주면 컴파일 및 실행을 할 수 있다.

    빌드하면 task.json과 실행파일인 exe가 같이 생성되며, 밑에 콘솔에서 실행 결과를 확인할 수 있다.

     

    그리고 라인 번호 왼쪽을 클릭하면 디버그 실행 시 빨간색 중지점을 지정할 수 있다.

    디버그 창에서 디버그 버튼을 누르게 되면, 

    이런 화면이 뜬다. F10을 눌러서 프로그램을 다음 중지점까지 이어서 실행시킬 수 있고, 좌측 패널에는 변수 값이 변화되는 모습을 볼 수 있다. 전역변수인 경우 밑에 조사식에 

    +(식추가) 버튼을 눌러서 찾아볼 수 있다.(참고로 지역 변수도 조사식에 넣을 수 있다.)

     

    • 컴파일러 버전을 바꾸었을 경우 .vscode 안에 있는 설정을 적절히 맞추어야 컴파일 및 디버그를 할 수 있다.(잘 모르겠으면 걍 삭제후 새로 생성하면 된다.)

     

    Makefile

    VScode의 컴파일 버튼을 사용해도 되지만, task.json을 이해하고 필요할 때 수정하기 위해서는 Makefile에 대해 알 필요가 있다. Makefile은 프로그램이 g++ 명령어를 사람 대신 한줄씩 입력하여 컴파일 과정을 자동화하려고 만들어졌다.

    make를 이용해 한번에 컴파일할 수도 있지만, make main.o 이렇게 특정 파일만 만들 수도 있다.

     

    Makefile 패턴

    CC=<컴파일러>
    CFLAGS=<컴파일 옵션>
    LDFLAGS=<링크 옵션>
    LDLIBS=<링크 라이브러리 목록>
    OBJS=<Object 파일 목록>
    TARGET=<빌드 대상 이름>
     
    all: $(TARGET)
     
    $(TARGET): $(OBJS)
    	$(CC) -o $@ $(OBJS) $(CFLAGS)
    
    .PHONY:clean
    clean:
    	rm -f *.o
    	rm -f $(TARGET)

    (Makefile은 확장자가 없다.) VScode에서는 탭을 입력하면 띄어쓰기 4번이 입력되는데 이러면 make 프로그램이 makefile을 인식하지 못한다. 정말 탭이라면 키보드 방향키로 커서를 움직였을 때 띄어쓰기 4번 거리가 한번에 이동된다. 이를 해결하는 한가지 방법으로 다른데서 탭을 입력하고 복붙하는 방법이 있다.

     

    .PHONY는 혹시 clean이란 이름의 파일이 있어도 명령어가 실행되도록 강제한다.

    참고 https://cloud-oky.tistory.com/983

     

    Makefile 이란 ? gcc, g++과 makefile의 차이?

    윈도우에서는 비쥬얼 스튜디오등을 사용하여 버튼을 눌러 컴파일하지만, 리눅스 환경에서 프로그램을 컴파일 할 때 make라는 프로그램을 사용한다. 1. makefile 이란? Shell에서 컴파일하는 방법중

    cloud-oky.tistory.com

    https://www.tuwlab.com/ece/27193

     

    [Make 튜토리얼] Makefile 예제와 작성 방법 및 기본 패턴 - ECE - TUWLAB

    리눅스 환경에서 소스코드를 다운받아서 수동으로 프로그램 설치를 해 보신 분들은 다음 세 줄의 명령어에 매우 익숙할 것입니다. ./configure make sudo make install 근래에는 make 외에 다른 빌드툴들이

    www.tuwlab.com

    사용 예시

    CC=g++
    CFLAGS=-std=c++17 -g -Wall -O2
    OBJS=main.o test.o
    TARGET=test.exe
     
    all: $(TARGET)
    
    $(TARGET): $(OBJS)
    	$(CC) -o $@ $(OBJS) $(CFLAGS)
    
    .PHONY:clean
    clean:
    	rm -f *.o
    	rm -f ${TARGET}
    
    #h의 변경까지 인식하려면 이렇게 명시해야 한다.
    main.o: test.o main.cpp
    test.o: test.h test.cpp

    사람 손으로 입력할 것을 프로그램이 대신 입력 + 의존성 추가로 파일의 변경이 있을 때 새로 컴파일 된다.

     

    Window에서 make 명령어 사용하기

    윈도우에서는 그냥은 make 명령어 사용 못하고, 프로그램을 다운로드 해야한다.

    https://gnuwin32.sourceforge.net/packages/make.htm

     

    Make for Windows

    • Complete package, except sources Setup  3384653 25 November 2006  8ae51379d1f3eef8360df4e674f17d6d

    gnuwin32.sourceforge.net

    이후 make.exe가 있는 경로를 환경변수의 Path에 추가하면 make 명령어를 사용할 수 있다.

     

    CMake

    https://developer0hye.tistory.com/entry/CMake-%EC%A7%80%EC%A0%95%EB%90%9C-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%B0%BE%EC%9D%84-%EC%88%98-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4-Generator

     

    [CMake] 지정된 파일을 찾을 수 없습니다 Generator

    C++ Project를 CMake를 사용하여 빌드하기 위해 CMakeLists.txt를 작성하였고 컴파일러 경로도 모두 명시적으로 지정해주었습니다. 그런데, cmake 커맨드를 입력하니 아래와 같은 오류가 출력이 되었습니

    developer0hye.tistory.com

    우분투에서 라즈베리파이 피코 컴파일때와는 조금 달라서 삽질하다가 해결 방법을 찾았다. 생각보다 간단하였다.

    우분투에서는 기본값이 Unix Makefiles로 되어있기 때문에 그냥 cmake를 하면 되는 것이고, 윈도우는 지정 해줘야 한다.

    -G 값을 이상한 것으로 설정하였을 때 나오는 오류창을 보면

    Generators
      Visual Studio 17 2022        = Generates Visual Studio 2022 project files.
                                     Use -A option to specify architecture.
      Visual Studio 16 2019        = Generates Visual Studio 2019 project files.
                                     Use -A option to specify architecture.
      Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                                     Optional [arch] can be "Win64" or "ARM".
      Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                                     Optional [arch] can be "Win64" or "ARM".
      Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                                     Optional [arch] can be "Win64" or "ARM".
      Visual Studio 11 2012 [arch] = Deprecated.  Generates Visual Studio 2012
                                     project files.  Optional [arch] can be
                                     "Win64" or "ARM".
      Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files.
                                     Optional [arch] can be "Win64" or "IA64".
      Borland Makefiles            = Generates Borland makefiles.
    * NMake Makefiles              = Generates NMake makefiles.
      NMake Makefiles JOM          = Generates JOM makefiles.
      MSYS Makefiles               = Generates MSYS makefiles.
      MinGW Makefiles              = Generates a make file for use with
                                     mingw32-make.
      Green Hills MULTI            = Generates Green Hills MULTI files
                                     (experimental, work-in-progress).
      Unix Makefiles               = Generates standard UNIX makefiles.
      Ninja                        = Generates build.ninja files.
      Ninja Multi-Config           = Generates build-<Config>.ninja files.
      Watcom WMake                 = Generates Watcom WMake makefiles.
      CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.
      CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.
      CodeBlocks - NMake Makefiles JOM
                                   = Generates CodeBlocks project files.
      CodeBlocks - Ninja           = Generates CodeBlocks project files.
      CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.
      CodeLite - MinGW Makefiles   = Generates CodeLite project files.
      CodeLite - NMake Makefiles   = Generates CodeLite project files.
      CodeLite - Ninja             = Generates CodeLite project files.
      CodeLite - Unix Makefiles    = Generates CodeLite project files.
      Eclipse CDT4 - NMake Makefiles
                                   = Generates Eclipse CDT 4.0 project files.
      Eclipse CDT4 - MinGW Makefiles
                                   = Generates Eclipse CDT 4.0 project files.
      Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files.
      Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
      Kate - MinGW Makefiles       = Generates Kate project files.
      Kate - NMake Makefiles       = Generates Kate project files.
      Kate - Ninja                 = Generates Kate project files.
      Kate - Unix Makefiles        = Generates Kate project files.
      Sublime Text 2 - MinGW Makefiles
                                   = Generates Sublime Text 2 project files.
      Sublime Text 2 - NMake Makefiles
                                   = Generates Sublime Text 2 project files.
      Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files.
      Sublime Text 2 - Unix Makefiles
                                   = Generates Sublime Text 2 project files.

    Generator 옵션이 굉장히 많은 것을 볼 수 있다.

     

    CMake 방법

    touch hello.cpp
    touch CMakeLists.txt

    VScode 파일 만들기 단축키가 누르기 쉽지 않고, 클릭하자니 번거롭다. 위 명령어로 간단하게 필요한 파일을 생성할 수 있다.(git 터미널)

    최소한의 CMakeLists.txt 구성이다. SOURCE가 많아지면

    set(SOURCE
    	main.cpp
    	lib.cpp
        )

    이런식으로 적어주면 된다. *.cpp 로 편하게 할 생각하지 말고 목록을 다 적는 것을 추천한다. 나중에 프로젝트가 커지면 전체 컴파일하는데 오래걸리게 될텐데 특정파일만 컴파일하거나, 특정 파일만 제외하고 컴파일할 때 후회할 것이다.

     

    터미널을 연 뒤 아래 명령어를 순서대로 입력하면 빌드 후 출력을 확인할 수 있다.

    mkdir build
    cd build
    cmake .. -G "MinGW Makefiles"
    
    make
    ./hello

    ..은 상위 리렉터리를 가르키는 상대 경로이다. CMakeList.txt가 build의 상위 디렉터리에 있기 때문에 ..을 사용한다.

     

    VScode 확장 사용하기

    VScode에 CMake, CMake tool 확장을 설치하고, cmake.exe 위치를 설정한 뒤 F7을 눌러도 제대로 빌드가 안되는데 그 이유는 Generator 기본값이 Unix Makefiles이기 때문이다.

    이렇게 바꾸어 주면 문제없이 작동한다. 비주얼 스트디오가 설치되어있다면 Visual Studio 16 2019 Win64등으로 대신 설정하여도 된다.

    또는 setting.json에

    {
    	...
    	"cmake.generator": "MinGW Makefiles",
        	"cmake.preferredGenerators": [
            	"MinGW Makefiles"
        	]
        ...
    }

    이런 인수를 추가한 뒤 F1을 눌러 CMake:Configurate를 실행시킨 후 빌드하여도 된다.

    • 중지점을 설정한 뒤 ctrl+F5 or CMake:Debug target을 실행시키면 cmake로 make한 파일을 디버깅 할 수 있다.

     

    참고

    https://webnautes.tistory.com/1158

     

    Visual Studio Code를 사용한 C/C++ 개발환경 만들기(Windows/Ubuntu)

    Windows와 Ubuntu 환경에 설치된 Visual Studio Code에서 C/C++을 컴파일하고 실행시키는 방법에 대해 설명합니다. 테스트에 사용한 운영체제 버전은 Windows 10과 Ubuntu 20.04입니다. Visual Studio Code 버전에 따라

    webnautes.tistory.com

    https://mryeo.tistory.com/21

     

    [C 언어] 윈도우에서 gcc 컴파일러 설치, 환경 변수에 경로 추가하기 (Windows)

    안녕하세요, 오늘은 윈도우에서 gcc 컴파일러를 설치 및 환경변수에 경로 추가하는 방법에 대해 포스팅 해보도록 하겠습니다. gcc 컴파일러 설치하기 윈도우용 GCC 컴파일러 설치 파일은 https://www.

    mryeo.tistory.com

    댓글

Designed by Tistory.