------------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
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
pacman -S
//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
mingw-w64-x86_64
pacman -S
-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();
}
}