Cpp development environment settings in Windows - githeim/windheim_archive GitHub Wiki

C++ development environment settings in Windows

์œˆ๋„์šฐ์ฆˆ ํ™˜๊ฒฝ์—์„œ C++ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฉ”๋ชจ.

์•„๋ž˜ ๋ฌธ์„œ๋ฅผ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ์ž‘์„ฑํ•œ๋‹ค. https://code.visualstudio.com/docs/cpp/config-mingw?originUrl=%2Fdocs%2F

Install vscode

https://code.visualstudio.com/Download

Install the package

then install the c/c++ extension

Install MSYS2

https://github.com/msys2/msys2-installer/releases/download/2024-12-08/msys2-x86_64-20241208.exe

์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ

D:\Installed\msys64 

๋ผ๊ณ  ์ƒ์ •

msys ํ”„๋กฌํ”„ํŠธ์—์„œ

pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

๋””ํดํŠธ๋กœ ์ „์ฒด ์„ค์น˜ - ๋Œ€๋žต 1GB ์•ˆ์ชฝ

์„ค์ • ๊ฒ€์ƒ‰ --> ์„ค์ •์œผ๋กœ ์ง„์ž…

ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๊ฒ€์ƒ‰ --> ๊ณ„์ •์— ๋Œ€ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ ํƒ

์•„๋ž˜์™€ ๊ฐ™์ด mingw64 bin ์œ„์น˜ ์„ค์ •

D:\Installed\msys64 ์œ„์น˜์— ์„ค์น˜ํ–ˆ๋‹ค๋ฉด

์œ„์น˜๋Š” ๋‹ค์Œ์ด ๋œ๋‹ค

D:\Installed\msys64\ucrt64\bin

ํ™˜๊ฒฝ๋ณ€์ˆ˜ Path์— ์œ„ ๊ฒฝ๋กœ ์ถ”๊ฐ€

๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ•˜๋‚˜ ๋„์šฐ๊ณ  ์•„๋ž˜์ฒ˜๋Ÿผ ์„ค์น˜์—ฌ๋ถ€ ํ™•์ธ

gcc --version

SDL2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

msys console ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์น˜

pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_image mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_ttf

์˜ˆ์ œ ์ฝ”๋“œ ์ž‘์„ฑ

main.cpp

#include <SDL2/SDL.h>
#include <iostream>

#undef main

int main(int argc, char* argv[]) {
    // SDL ์ดˆ๊ธฐํ™”
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        std::cerr << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    }
    // SDL ์ฐฝ ์ƒ์„ฑ
    SDL_Window* window = SDL_CreateWindow("Main Window",
                                          100, 100, 800, 600, SDL_WINDOW_SHOWN);
    if (!window) {
        std::cerr << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
        SDL_Quit();
        return 1;
    }

    // SDL ๋ Œ๋”๋Ÿฌ ์ƒ์„ฑ
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if (!renderer) {
        std::cerr << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
        SDL_DestroyWindow(window);
        SDL_Quit();
        return 1;
    }

    // ํ…์Šค์ฒ˜ ์ƒ์„ฑ์„ ์œ„ํ•œ surface ์ƒ์„ฑ
    SDL_Surface* surface = SDL_CreateRGBSurface(0, 80, 400, 32, 0, 0, 0, 0);
    if (!surface) {
        std::cerr << "Surface creation failed: " << SDL_GetError() << std::endl;
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
        SDL_Quit();
        return 1;
    }

    // surface๋ฅผ ๋…น์ƒ‰์œผ๋กœ ์ฑ„์šฐ๊ธฐ
    SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 0, 255, 0));

    // surface๋กœ๋ถ€ํ„ฐ ํ…์Šค์ฒ˜ ์ƒ์„ฑ
    SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface);
    SDL_FreeSurface(surface); // surface๋Š” ๋” ์ด์ƒ ํ•„์š”์—†์Œ

    if (!texture) {
        std::cerr << "Texture creation failed: " << SDL_GetError() << std::endl;
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
        SDL_Quit();
        return 1;
    }

    bool quit = false;
    SDL_Event e;

    while (!quit) {
        while (SDL_PollEvent(&e)) {
            if (e.type == SDL_QUIT) {
                quit = true;
            }
            if (e.type == SDL_KEYDOWN) {
                if (e.key.keysym.sym == SDLK_LEFT) {
                    // ์™ผ์ชฝ ํ™”์‚ดํ‘œ ํ‚ค
                } else if (e.key.keysym.sym == SDLK_RIGHT) {
                    // ์˜ค๋ฅธ์ชฝ ํ™”์‚ดํ‘œ ํ‚ค
                }
            }
        }
        // ๊ทธ๋ฆด ์ƒ‰๊น” ๊ฒ€์€์ƒ‰์œผ๋กœ ์„ค์ •
        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
        // ํ™”๋ฉด ์ง€์šฐ๊ธฐ - ๊ฒ€์€์ƒ‰์œผ๋กœ ๊ทธ๋ฆฌ๊ธฐ
        SDL_RenderClear(renderer);

        // ์‚ฌ๊ฐํ˜•์˜ ์œ„์น˜์™€ ํฌ๊ธฐ ์„ค์ •
        SDL_Rect destRect;
        destRect.w = 80;
        destRect.h = 400;
        destRect.x = (800 - destRect.w) / 2;
        destRect.y = (600 - destRect.h) / 2;

        // ํšŒ์ „ ์ค‘์‹ฌ์  ์„ค์ •
        SDL_Point center = {destRect.w / 2, destRect.h / 2};

        // ํ…์Šค์ฒ˜๋ฅผ 43๋„ ํšŒ์ „ํ•˜์—ฌ ๊ทธ๋ฆฌ๊ธฐ
        SDL_RenderCopyEx(renderer, texture, NULL, &destRect, 43.0, &center, SDL_FLIP_NONE);
        // ํ™”๋ฉด ์—…๋ฐ์ดํŠธ
        SDL_RenderPresent(renderer);
        // ์‰ฌ๊ธฐ 16ms
        SDL_Delay(16);
    }

    // ์ •๋ฆฌ
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

SDL2 DLL ๋ณต์‚ฌ ๋ฃจํ‹ด์„ ํฌํ•จํ•œ tasks.json

.vscode/tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "main.cpp",
                "-o",
                "main.exe",
                "-I",
                "D:/Installed/msys64/mingw64/include",
                "-L",
                "D:/Installed/msys64/mingw64/lib",
                "-lSDL2main",
                "-lSDL2",
                "-mconsole"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn": ["Copy SDL2 DLL"]
        },
        {
            "label": "Copy SDL2 DLL",
            "type": "shell",
            "command": "copy",
            "args": [
                "D:\\Installed\\msys64\\mingw64\\bin\\SDL2.dll",
                "${fileDirname}"
            ],
            "problemMatcher": []
        }
    ]
}

.vscode/launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug SDL2 Program",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/main.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file"
        }
    ]
}
โš ๏ธ **GitHub.com Fallback** โš ๏ธ