Sunday, July 7, 2019

VS Code + SDL2 + SFML + Qt5

------------MSYS2-------------
//https://www.msys2.org
//update
pacman -Syu
pacman -Su

//C++
pacman -S mingw-w64-x86_64-clang
pacman -S mingw-w64-x86_64-lldb
pacman -S mingw-w64-x86_64-lld
pacman -S mingw-w64-x86_64-clang-tools-extra
pacman -S mingw-w64-x86_64-libc++

====================================== 
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gdb
pacman -S mingw-w64-x86_64-boost
pacman -S mingw-w64-x86_64-ninja 

//https://www.libsdl.org
pacman -S mingw-w64-x86_64-SDL2

pacman -S mingw-w64-x86_64-SDL2_gfx
pacman -S mingw-w64-x86_64-SDL2_image 
pacman -S mingw-w64-x86_64-SDL2_mixer
pacman -S mingw-w64-x86_64-SDL2_net
pacman -S mingw-w64-x86_64-SDL2_ttf
 
//https://www.sfml-dev.org
pacman -S mingw-w64-x86_64-sfml  
 
//https://www.qt.io
pacman -S mingw-w64-x86_64-qt5
pacman -S mingw-w64-x86_64-vulkan
//https://www.gtk.org
pacman -S mingw-w64-x86_64-gtk3
pacman -S mingw-w64-x86_64-glade
pacman -S mingw-w64-x86_64-devhelp  
 

//https://www.sqlite.org
pacman -S mingw-w64-x86_64-sqlite3  
pacman -S mingw-w64-x86_64-tinyxml
pacman -S mingw-w64-x86_64-tinyxml2 
pacman -S mingw-w64-x86_64-zlib
pacman -S mingw-w64-x86_64-nlohmann_json 
pacman -S mingw-w64-x86_64-rapidjson 
 
and more:
vim 
lua
glm
git
make
-cmake 
 
---------SYSTEM_PATHES-------- 
 
PATH
C:\msys64\mingw64\bin 
 
C_INCLUDEDE_PATH
C:\msys64\mingw64\include\
 
CPLUS_INCLUDE_PATH
C:\msys64\mingw64\include\;
C:\msys64\mingw64\include\c++\9.1.0 
 
LIBRARY_PATH
C:\msys64\mingw64\lib     

==========SDL2===========
-----------a.cpp-------------

#include <SDL2\SDL.h>

int main(int argc, char *argv[])
{
    // Start SDL2
    SDL_Init(SDL_INIT_EVERYTHING);

    // Create a Window in the middle of the screen
    SDL_Window *window = 0;

    window = SDL_CreateWindow("game!",
                              SDL_WINDOWPOS_CENTERED,
                              SDL_WINDOWPOS_CENTERED,
                              640, 480,
                              SDL_WINDOW_SHOWN);

    // Delay so that we can see the window appear
    SDL_Delay(2000);

    // Cleanup and Quit
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;


---------cli----------

g++ a.cpp -lmingw32 -mwindows -lSDL2main -lSDL2 -o a.exe
 
----------Makefile----------- 

build:
 g++ -w -std=c++14 -Wfatal-errors \
 ./src/*.cpp \
 -o game \
 -I"./include" \
 -L"./lib" \
 -lmingw32 \
 -mwindows \
 -llua \
 -lSDL2main \
 -lSDL2 \
 -lSDL2_image \
 -lSDL2_ttf \
 -lSDL2_mixer;

clean:
 rm ./game;

run:
 ./game;

--------make--------

./make
./make run
./make clean


===============VSCode================
=====================================

------------task.json----------------

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++ build main.cpp",
            "command": "g++",
            "args": [
                //warnings
                "-Wall",
                //debug config
                "-g",
                //cpp standard
                "-std=c++14",
                //source files
                "./src/*.cpp",
                //Directories
                "-IC:/msys64/mingw64/include; C:/msys64/mingw64/include/c++/9.1.0",
                "-LC:/msys64/mingw64/lib",
                "-lmingw32",
                "-mwindows",

                "-llua",
                //SDL2
                "-lSDL2main",
                "-lSDL2",
                "-lSDL2_image",
                "-lSDL2_ttf",
                "-lSDL2_mixer",

                //SFML
                "-lsfml-audio",
                "-lsfml-graphics",
                "-lsfml-network",
                "-lsfml-system",
                "-lsfml-window",

                //Qt5
                "-lQt5Core",
                "-lQt5Gui",
                "-lQt5Widgets",
                //output name
                "-o",
                "game.exe"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}



---------------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": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/game.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}



-------------------c_cpp_properties.json---------------------

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/msys64/mingw64/include",
                "C:/msys64/mingw64/include/c++/9.1.0"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "C:/msys64/mingw64/bin/g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64",
            "browse": {
                "path": [
                    "${workspaceFolder}",
                    "C:/msys64/mingw64/include",
                    "C:/msys64/mingw64/include/c++/9.1.0"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            }
        }
    ],
    "version": 4
}


--------------------settings.json-------------------------

{
    "editor.formatOnSave": true,
    "editor.suggestSelection": "first",
    "workbench.colorTheme": "One Dark Pro",
    "breadcrumbs.enabled": true,
    "debug.allowBreakpointsEverywhere": true,
    "editor.renderWhitespace": "all"
}



============Qt5======================
-------------------main.cpp---------------------------------

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QGridLayout>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    //Label
    QLabel *label = new QLabel("Hello world !");
    label->setStyleSheet("QLabel:hover { color: rgb(255, 0, 0)}");
    label->setFont(QFont("Comic Sans MS", 18));
    //Button
    QPushButton *myButton = new QPushButton(QIcon("./assets/filesaveas.png"), "Push Me");
    myButton->setToolTip("Click this to turn back the hands of time");
    //Layout
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(label, 0, 0);
    layout->addWidget(myButton, 0, 1);
    //Window
    QWidget *window = new QWidget;
    window->setLayout(layout);
    window->show();

    return app.exec();
}



=============SFML==================
---------------------main.cpp-----------------------------
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(640, 480), "SFML Application");
    sf::CircleShape shape;
    shape.setRadius(40.f);
    shape.setPosition(100.f, 100.f);
    shape.setFillColor(sf::Color::Cyan);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();

        }
         window.clear();
         window.draw(shape);
         window.display();
    }
}










MSYS2 + SDL2

1.Download and install msys2 64bit

2.Update msys2

  • Update msys2 64bit after install by running pacman -Syu if pacman needs to be updated you might have to close and reopen the terminal and run pacman -Syu again

3.Install build tools

  • pacman -S git mingw-w64-x86_64-toolchain mingw64/mingw-w64-x86_64-SDL2 mingw64/mingw-w64-x86_64-SDL2_mixer mingw64/mingw-w64-x86_64-SDL2_image mingw64/mingw-w64-x86_64-SDL2_ttf mingw64/mingw-w64-x86_64-SDL2_net mingw64/mingw-w64-x86_64-cmake make

4.Compile Hello World

hello.c

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

const int WIDTH = 800, HEIGHT = 600;

int main(int argc, char *argv[]) {
  SDL_Window *window;
  SDL_Renderer *renderer;
  if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    printf("SDL_Init failed: %s\n", SDL_GetError());
    return 1;
  }

  window = SDL_CreateWindow("Hello, World!",
                                        SDL_WINDOWPOS_UNDEFINED,
                                        SDL_WINDOWPOS_UNDEFINED,
                                        WIDTH, HEIGHT,
                                        SDL_WINDOW_ALLOW_HIGHDPI);
  if(window == NULL) {
    printf("Could not create window: %s\n", SDL_GetError());
    return 1;
  }
  
  renderer = SDL_CreateRenderer(window, -1, 0);
  SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
  SDL_RenderClear(renderer);

  SDL_RenderPresent(renderer);
  
  SDL_Event event;
  while(1) {
    if(SDL_PollEvent(&event)) {
      if(event.type == SDL_QUIT) {
        break;
      }
    }
  }

  SDL_DestroyWindow(window);

  SDL_Quit();
  return 0;
}

Compiling with mingw64

gcc -o hello -Wall hello.c `sdl2-config --cflags --libs`