0. Введение
MinGW (Minimalist GNU для Windows) — это минималистская среда разработки для приложений Microsoft Windows. MinGW предоставляет полный набор инструментов программирования с открытым исходным кодом, пригодных для разработки собственных приложений MS-Windows, и не зависит от какой-либо сторонней DLL-библиотеки времени выполнения C. MinGW в основном используется разработчиками, работающими на платформе MS-Windows, но также может использоваться на разных платформах.
- Порт GCC, включая компиляторы C, C ++, ADA и FORTRAN;
- GNU Binutils (например, as, ld, ar и т. Д.);
- Установщик командной строки с дополнительным интерфейсом GUI (mingw-get) для развертывания MinGW и MSYS в MS-Windows;
- Инструмент начальной настройки графического интерфейса (mingw-get-setup) может помочь запустить и запустить mingw-get.
Mingw-w64 является обновленной версией исходного проекта mingw.org, целью которого является поддержка компилятора GCC в системах Windows. Он разветвлен в 2007 году для обеспечения поддержки 64-битных и новых API. С тех пор он широко используется и распространяется.
1. Скачать
Требуется загрузкаsourceforge
установка
Для установки вы можете использовать Установщик или загрузить следующий сжатый пакет напрямую
Если вы устанавливаете с помощью установщика, загрузите и запуститеMinGW-W64-install.exe
, как показано ниже
installer
Вот несколько вариантов
- Версия формулирует номер версии, начиная с 4.9.1-8.1.0, выбирайте при необходимости, используйте последнюю версию без особых требований;
- Архитектура связана с операционной системой, 64-битные системы выбирают x86_64, 32-битные системы выбирают i686;
- Потоки устанавливают нить стандартного опционального posix или win32;
- Исключение устанавливает систему обработки исключений, x86_64 может быть seh и sjlj, i686 — dwarf и sjlj;
- Номер версии сборки сборки ревизии, выберите самую большую.
При загрузке сжатого пакета выберите подходящее место для его распаковки, добавьте mingw64 / bin в переменную окружения
- использование
После добавления переменных среды откройте CMD и выполните gcc -v
Если вы видите похожую информацию, это означает, что установка прошла успешно
info
Тогда вы можете счастливо использовать gcc и g ++.
Method to switch from MinGW-w32 to MinGW-w64
Download the executable file of MinGW-w64Refer the EDIT
(Executable file link may change for future releases, this is for Version 8.1.0, Kindly cross verify the latest version before installing from this link)
- Installation Process (In Settings):
Version: PICK LATEST
Architecture: x86_64
Threads: posix
Exception: seh
If anyone is trying to add MinGW-w64 as a PATH variable and is not able to find the gdb.exe
in C:msys64mingw64bin
, try looking for it in the Program files.
C:Program Filesmingw-w64x86_64-8.1.0-posix-seh-rt_v6-rev0mingw64bin
The gdb.exe
and other files are located in this directory.
EDIT:
After making some changes in the launch.json file in VSCode, the MinGW-w64 GDB debugger started giving errors because there was 2 versions of MinGW in different folders i.e, MINGW and mingw64!
It is essential that the installation path does not contain any spaces
(i.e., space in «Program Files»), this will create conflicts later.
STEPS:
1. Uninstalled all the versions of GCC that was installed in the PC — Cygwin, MSYS2(32 bit) and mingw64(64 bit) and installed the MinGW-w64 again, this time using the MSYS2.
Please start afresh, if debugger is giving errors and if versions are clashing!
2. Download the MSYS2 installer from this link.
Install process is simple, follow the steps mentioned in the website!
It is essential that the installation path does not contain any spaces. Therefore, we cannot install MinGW-w64 in Program Files.
3. After Installation is complete: Open MSYS2 terminal (pink icon).
Update the package database and base packages using:
pacman -Syu
After this, Update rest of the base packages using:
pacman -Su
4. Now switch over to MSYS2 MinGW 64-bit terminal (blue icon).
To install gcc and g++ for C and C++.
For 64 bit:
pacman -S mingw-w64-x86_64-gcc
To install debugger (gdb).
For 64 bit:
pacman -S mingw-w64-x86_64-gdb
5. Now you’re all SET!
Check versions:
gcc --version
g++ --version
gdb --version
6. Finally, remove the old environment variables if any are left and add the new environment variable to the PATH!
BEFORE DEBUGGING FILES IN VSCode, MAKE SURE TO ADD -g tag while building, otherwise breakpoints will be ignored by the debugger!
Footnote:
It’s very important to keep all the versions in one folder, if folders are different, then life will get tough later!
In this tutorial ,
We will learn How to install 64 bit (GCC) GNU Compiler Collection (Mingw-w64 port) on a Windows 10 system using MSYS2 installer for C/C++ software development.
|
GNU Compiler Collection (GCC) is an compiler produced by the GNU Project supporting various programming languages like for Objective-C, Objective-C++, Fortran, Ada, D and Go. Here we will be concentrating only C/C++ development on Windows 10.
GCC along with other utilities like GNU Binutils for Windows (assembler, linker, archive manager), set of freely distributable Windows specific header files and static import libraries have been ported to Windows platform and is available in the following flavors.
- MinGW — («Minimalist GNU for Windows») which can be used for creating 32 bit native executable on Windows platform
- Mingw-w64 — 64bit
Please note that we will not be covering WSL or Windows Subsystem for Linux.
What is Mingw-w64
Mingw-w64 is a fork off MinGW which provides a more complete Win32 API implementation including Win64 support,C99 support, DDK, DirectX.Mingw-w64 can generate 32 bit and 64-bit executables for x86 under the target names i686-w64-mingw32 and x86_64-w64-mingw32.
Here we will be using Mingw-w64 for C/C++ native application development using Windows API as most modern PC are now 64 bit.
Mingw-w64 Project does not provide any binaries for download from its website instead it maintains a list of Pre-built toolchains and packages provided by other vendors.
These prebuilt toolchains contains GCC, Debugger ,Package Manager ,Terminals and a set of other Unix tools like curl, openssl, sed, awk etc which can be used for development on Windows Platform.
Here we will be using a Mingw-w64 package called MSYS2 Software Distribution
MSYS2
MSYS2 is a collection of tools and libraries providing the developer with an easy-to-use environment for building, installing and running native Windows software.
MSYS2 Software Distribution consists of
- command line terminal called mintty,
- Bash,
- tools like tar and awk
- build systems like autotools,
all based on a modified version of Cygwin. Despite some of these central parts being based on Cygwin, the main focus of MSYS2 is to provide a build environment for native Windows software and the Cygwin-using parts are kept at a minimum.
To install and remove various software packages internally MSYS2 uses Pacman as their package manager.
MSYS2 is sponsored by Microsoft Open Source Programs Office through their FOSS Fund.
- Download MSYS2 Software Distribution (Mingw-w64) for Windows
- Download extra MSYS2 Packages from Repo here
Installing MSYS2 on Windows
Installing MSYS2 on Windows 10 is quite easy. Download the executable using the above link and run it
After the binary is installed on your system ,
MSYS2 comes with different environments/subsystems and the first thing you have to decide is which one to use.
The differences among the environments are mainly environment variables, default compilers/linkers, architecture, system libraries used etc.
If you are unsure, go with UCRT64.
UCRT (Universal C Runtime) is a newer version which is also used by Microsoft Visual Studio by default.
It should work and behave as if the code was compiled with MSVC.
You can start a terminal .The default terminal is Mintty (above)
Install GCC on Windows using Pacman on Windows 10
MSYS2 on Windows 10 uses pacman as its package manager.
After installing MSYS2 ,you can check the installed packages by typing
$pacman -Q
on the Mintty terminal.
This will list all the available packages on your system.
GCC will not be installed by default, So you can go to the package repo and search for gcc.
You can now use pacman to install gcc
$pacman -S gcc
After which you can check GCC by issuing the whereis command.
$whereis gcc
Compiling C/C++ file on Windows10 using GCC (MingW-w64/MSYS2)
First we will compile a simple c file using gcc.
Code below ,Save as main_c.c
#include<stdio.h>
int main()
{
printf("Hello World");
return 0;
}
Compile and run the code using the below commands
$ gcc -o main_c main_c.c $ ./main_c
Compiling a C++ code using GCC (MingW-w64/MSYS2)
Code below, Save as main_cpp.cpp
#include <iostream> using namespace std; int main() { cout << "Hello from MSYS2n!"; cout << "Compiled C++ Filen!"; }
Compile and run the code using the below commands
$ g++ -o main_cpp main_cpp.cpp $ ./main_cpp
Compiling a Win32/64 API GUI C code using GCC (MingW-w64/MSYS2)
Now we will compile a Win32/64 GUI application using GCC (MingW-w64/MSYS2) on Windows 10 .
We will create a Window and a Message Box using Win32 native api and configure the gcc to compile and link to the native system API.
Copy the below code and save it as win.c
#include<Windows.h> int WINAPI WinMain(HINSTANCE hInstance, //the instance of the program HINSTANCE hPrevInstance, //the previous instance LPSTR lpCmdLine, //ptr to command line args int nCmdShow) //display properties { HWND h; h = CreateWindow("BUTTON", "Hit me", WS_OVERLAPPEDWINDOW, 350,300,250,100,0,0, hInstance,0); //Create a window with BUTTON class ShowWindow(h,nCmdShow); //show the window MessageBox(0,"Press Me","Waiting",MB_OK); //used to display window }
You can compile the Win32 API code on GCC using the following command
$ gcc -o win win.c -Wl,--subsystem,windows -lgdi32 $ ./win
Here
-
The -Wl,—subsystem,windows linker switch ensures that the application is built as a Windows GUI application, and not a console application. Failing to do so would result in a console window being displayed whilst your application runs
-
You should link with the gdi32 library using «—lgdi32 » otherwise the code will complain about «undefined reference to GetStockObject«.
Пару слов о том для чего это понадобилось вообще: у меня была простая ситуация — не было быстрого интернета и был компьютер с начисто установленной windows 10. К тому же проект, который ковыряю, требует сборки как под 32 так и под 64 битную архитектуру, поэтому мне показалось что наличие Qt, одинаково сконфигуренного и скомпилированного под эти архитектуры будет только плюсом.
0) Желательно заранее отрубить службы Windows Search и Superfetch и защитник винды. Они на наших операциях будут только тормозить систему, а ресурсы нам скоро понадобятся. Кроме того очень полезно сделать языком ввода по умолчанию английский.
1) Создаем папку «C:QT» — тут будут жить наши сборки.
2) Для начала нам конечно же понадобится сам компилятор mingw-w64. Качаем инсталлер тут.
3) Устанавливаем по очереди обе версии:
первая установка:
Version — 5.2.0 — последняя на момент написания статьи;
Architecture — i686 — сначала ставим 32 битную версию (пускай вас не пугает что оно не i386, i686 это Интел пентиум про и выше, сумеете запустить 2k винду на чем то более древнем — удачи!)
Threads — win32 — если не портируете исходники с юниксов лучше выбрать нативные;
Exeption — sjlj — мне нужно так, если вам нужны другие — бога ради;
Build revision — 1 опять же последняя на момент написания статьи;
Назначение выбрал «C:mingw-w64-i686» ибо из Program Files могут быть проблемы с пробелами в путях у qt.
Вторая установка все то же самое кроме:
Architecture — x86_64;
Путь «C:mingw-w64-x86_64»;
Я так же убрал галку «создать ярлыки», иначе они перезапишутся 64 битной версией, мне это неудобно.
Если не хотите плодить много папок в корне ставить можно в «C:QTmingw-w64-i686» и «C:QTmingw-w64-x86_64» соответвенно архитектурам, роли это не играет.
4) Качаем исходники бибилиотеки QT 4.8.7 тут
5) Распаковываем сам Qt (тут лучше заранее озаботится наличием программы 7zip ибо виндовый архиватор сначала будет распаковывать во временную папку, потом копировать из нее туеву хучу мелких файлов, идиот, а потом ещё и создаст дополнительную папку внутри с тем же именем) сразу в 2 копии «C:QTqt-4.8.7-mingw-w64-i686» и «C:QTqt-4.8.7-mingw-w64-x64» (вторая нужна на случай ошибок при конфигуре, гораздо быстрее переименовать копию и пустить фоном распаковываться ещё одну, чем ждать пока отработает mingw32-make confclean). Если не уверены в архиваторе проверяем чтобы в этих папках сразу были папки bin, util, src и т.д., если архиватор создал ещё одну вложенную — вытаскиваем содержимое на уровень выше.
6) Идем в свойства системы и меняем переменную PATH (надо же в моей 10-ке сделали нормальный интерфейс для этого) добавляем туда путь пока только к 32 битной версии компилятора, у меня это: «C:mingw-w64-i686mingw32bin». Если вдруг у вас в PATH есть пути к другим компиляторам временно убираем их оттуда.
7) Запускаем cmd от админа (это важно) и вводим:
g++ -v
должна появится инфа о компиляторе, если этого не произошло значит компиль установлен неправильно, ищем ошибку на предыдущих шагах. Если вывелась информация проверяем, что мы ничего не напутали: у нас запускается действительно 32 битная версия, и что она именно та которую мы установили на предыдущих шагах, а не из оригинального mingw без w64 (это по сути разные проекты) или, прости господи, вижуал студии.
Если все нормально переходим в папку с Qt:
cd C:QTqt-4.8.7-mingw-w64-i586
запускаем там конфигур как-то так:
.configure -debug-and-release -opensource -confirm-license -platform win32-g++ -graphicssystem raster -no-openssl -nis -iconv -system-proxies -no-freetype -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -qt-style-windowsce -qt-style-windowsmobile -qt-style-s60
в этом конфиге по максимому все что можно собрать без зависимостей. Мне openssl не очень нужен, иначе его нужно собрать заранее. Если критично время можно отключить примеры, не собирать дополнительные темы и odbc плагин. Справку по опциям можно получить так: «.configure -help». Далее ждем несколько минут пока отработает конфигур, и запускаем компиляцию:
mingw32-make -j4
у меня 4 ядерный процессор по этому опция -j4 она обозначает делать компиляцию в 4 потока. Сразу оговорюсь, компиляция с этой опцией до конца не проходит, грохается на qtdeclarative с ошибкой копирования файла, видимо где то неправильно прописаны зависимости. Мне достаточно было запустить компиляцию после сбоя ещё раз. Ошибка кстати повторилась и на 64 битной версии. На core i5-3570 c 8-ю гигами оперы компиляция одной версии в 4 потока занимает почти 2 часа.
Если у вас медленный интернет, пока компилится сам Qt можно поставить на закачку qt creator 3.2.2 (это последняя версия, которая компилится на 4.8.x), ActivePerl-5.20.2 !32 битную версию! и msysgit !32 битную версию! Указанные тут верcии это последние на момент написания статьи, и, соответственно, те с которыми работал я. Если у вас что-то не пошло на более новых, попробуйте указанные мной. Предупрежу сразу, до сборки qtcreator ставить msysgit очень не желательно, креатор нормально не соберется если увидит в патче sh.exe, а для нормальной работы с гитом его как раз стоит ставить с прописыванием PATH.
9) Устанавливаем perl: я не ставил документацию и примеры, местом назначения сделал «C:perlx86». Галку «Add perl to the PATH environment variable» не снимаем. После установки в командной строке (естественно не в той, в которой компилится Qt) пишем «perl -v», должна появится информация о версии.
10) Распаковываем qt creator в » C:QTqt-creator-opensource-src-3.2.2″, так же проверяем чтобы внутри не было вложенной папки, а сразу были папка bin и остальное.
11) Ждем когда компилируется qt. Никаких прямых сообщений что компиляция завершена успешно, не будет. У меня последним собрался ‘C:/QT/qt-4.8.7-mingw-w64-i586/demos/declarative/webbrowser’. Можно запустить qtdemo.exe для проверки, позапускать примеры. Снова открываем редактор переменных среды, дописываем в PATH «C:QTqt-4.8.7-mingw-w64-i586bin». Опять же убеждаемся, что это единственный профиль qt в PATH. Проверяем себя, перезапустив командную строку и набрав «qmake -v».
12) Открываем блокном файл «C:QTqt-creator-opensource-src-3.2.2srclibsutilstcpportsgatherer.cpp», находим строчку
#if __GNUC__ == 4 && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 2)
и меняем её на
#if __MINGW64_VERSION_MAJOR == 5 || (__GNUC__ == 4 && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 2))
13) Перезапускаем cmd опять же от админа. Собираем creator в новой папке:
mkdir C:QTqt-creator-3.2.2-x86
cd C:QTqt-creator-3.2.2-x86
qmake -r ../qt-creator-opensource-src-3.2.2/qtcreator.pro
mingw32-make release -j4
надеюсь, повторяться про опцию -j4 не надо.
14) Ждем окончания компиляции, запускаем qtcreator, убеждаемся что работает. Закрываем, настраивать в нем пока ещё нечего. Если очень жалко места на диске и оперативы, можно уже скомпиленный creator закинуть в папку с Qt (скопировать только папки bin, lib, share) и добросить в папку bin недостающие dll-ки из mingw. По человечески же, надо наоборот: убрать компилятор и Qt из PATH и докопировать в папку bin creator-а dll-ки из папок bin от Qt и компилятора.
15) Снова открываем редактор PATH убираем оттуда путь к скомпиленному Qt «C:QTqt-4.8.7-mingw-w64-i586bin» и меняем путь к компилятору c «C:mingw-w64-i686mingw32bin» на «C:mingw-w64-x86_64mingw64bin». Опять же перезапускаем cmd от админа и проверяем что нам выдаст
g++ -v
если все в норме, делаем все то же самое что и в шаге 6, только путь у нас теперь будет другой.
cd C:QTqt-4.8.7-mingw-w64-x86_64
.configure -debug-and-release -opensource -confirm-license -platform win32-g++ -graphicssystem raster -no-openssl -nis -iconv -system-proxies -no-freetype -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -qt-style-windowsce -qt-style-windowsmobile -qt-style-s60
mingw32-make -j4
16) Теперь, пока компилится 64 битная версия Qt, можно заняться и гитом (джитом, не знаю какая транскрипция правильнее). Устанавливаем msysgit v2.6.3 !32 битную версию! запускаем инсталлер сразу от админа, иначе он поставит нам версию только для локального пользователя, оно нам не надо. Путь я выбрал «C:msysGitX86». На следующем шаге можно ткнуть галку, которая создаст ярлык к консоли на рабочем столе. Eщё через шаг выбираем «Use git from the Windows Command Promt», Я еще выбрал «Use Windows` default console window» для терминала, остальное на любителя или по умолчанию.
На blogspot есть замечательная статья о том как подружить qt creator и github. Однако в ней не даны инструкции что делать если винт на котором все это настроено сгорел синим пламенем. Попробуем восполнить этот пробел.
17) Запускаем git-bash от админа, с ярлыка который нам создал установщик
делаем настройки, конечно же подставив ту почту на которую зарегистрирован аккаунт на гитхабе и свой никнейм
git config --global user.email "myMail@example.com"
git config --global user.name "myGithubNick"
git config --global push.default simple
генерим новую пару ключей для ssh:
ssh-keygen -t rsa -C "myMail@example.com"
3 раза жмакаем enter, заходим браузером в свой профиль на гитхабе, удаляем старый ключ (если конечно не собираемся им пользоваться, а он утрачен как у меня) и добавляем новый.
пробуем склонировать существующий репозиторий:
mkdir C:\myproject
cd C:\myproject
git clone git@github.com:myGithubNick/mysuperproject.git
обратите внимание что пользователь «git», а не никнейм; никнейм указывается уже после двоеточия. Кроме того никаких https:// или git:// перед адресом быть не должно, если получаете сообщение, что нужно использовать https, значит гитхаб не опознал в вас владельца репозитория, ищите проблемы с ключами или ssh. Если все в порядке, гит сделает нам копию репозитория в папке mysuperproject. Зайдем в нее и проверим что репозиторий рабочий, и у нас есть все права
cd ./mysuperproject
git remote -v
touch .testfile.txt
git add .testfile.txt
git commit -m test
git push
git reset --hard HEAD~1
git push -f
естественно ошибок быть не должно, если есть значит что-то не так с установкой гита или ssh.
18) Дожидаемся пока скомпилится 64 битная версия Qt. Убираем из PATH 64 битный компилятор, либо совсем, либо меняем на 32 битную версию, это уже как удобнее. Открываем блокнотом «C:QTqt-4.8.7-mingw-w64-x86_64mkspecswin32-g++qmake.conf», сразу после комментов дописываем «QMAKE_TARGET.arch += x86_64», сохраняем, закрываем.
19) Снова запускаем creator (если сейчас он перестал запускаться, значит что-то лишнее есть в path или не все библиотеки мы ему подложили).
Открываем Инструменты(Tools)->Параметры(Options). Сразу же в разделе Среда(Environment) на вкладке Основные(General) нас просят ввести путь к командe patch, можно использовать «C:msysGitX86usrbinpatch.exe». Идём во Внешние утилиты(External Tools) — правим пути.
Переходим в раздел Сборка и запуск(Build & Run), переходим на вкладку Отладчики(Debuggers), нажмаем Добавить(Add), название даем: «mingw32-w64-gdb», путь: «C:mingw-w64-i686mingw32bingdb.exe». Снова жмем Добавить(Add), название даем: «mingw64-w64-gdb», путь: «C:mingw-w64-x86_64mingw64bingdb.exe».
Переходим на вкладку Компиляторы(Compilers), нажмаем Добавить(Add) ->MinGW, если нет определенных в path имя даем «MinGW32-W64» и путь «C:mingw-w64-i686mingw32bing++.exe» (можно и копию сделать для удобства, не страшно). Добавляем ещё один: имя «MinGW64-W64» путь «C:mingw-w64-x86_64mingw64bing++.exe», ABI выбираем 64битные, если есть.
Переходим на вкладку Профили Qt (Qt versions), Если 32 битного профиля нет в path добавляем сначала его «C:QTqt-4.8.7-mingw-w64-i586binqmake.exe». Потом добавляем 64 битный «C:QTqt-4.8.7-mingw-w64-x86_64binqmake.exe». Имена у меня «Qt 4.8.7 mingw-w64 i586» и «Qt 4.8.7 mingw-w64 x86_64» соответвенно.
Переходим на вкладку Комплекты(kits), сначала настраиваем профиль Desktop:
Название:Desktop
Имя в файловой системе: x86
Тип устройства:Desktop
Устройство: Локальный ПК
Sysroot: — оставляем пустым
Компилятор: MinGW32-W64
Отладчик: mingw32-w64-gdb
Профиль Qt: Qt 4.8.7 mingw-w64 i586
Добавляем ещё один
Название:Desktop 64
Имя в файловой системе: x86_64
Тип устройства:Desktop
Устройство: Локальный ПК
Sysroot: — оставляем пустым
Компилятор: MinGW64-W64
Отладчик: mingw64-w64-gdb
Профиль Qt: Qt 4.8.7 mingw-w64 ч86_64
сохраняем, применяем, пробуем что-нибудь собрать.
Вот пожалуй и все что вспомнил по данной теме.
Кстати небольшой хак: если нужно незначительно переконфигурить уже собранную сборку, ну например openssl вы решили добавить или плагин к какому-нить мускулю не собрался, а 2-3-4 часа ждать пока все перекомпилиться ни разу не улыбается, делаем так: выставляем системное время на минут 10-15 раньше чем последний раз конфигурили сборку, переконфигуриваем, возвращаем время на настоящее. Блокнотом изменяем тот(те) мейкфайл(ы) который(е) затрагивает(ют) наши изменения и запускаем мейк, если не ошиблись с мейкфайлами (на самом деле если знать из чего состоит Qt, и что от чего зависит, ошибится трудно) перекомпилится только тот кусок который нам нужен.
General Usage Instructions
There are several options you can choose from:
- rubenvb «release» builds: these are stable builds using the latest released GCC and MinGW-w64. GCC 4.5 and up is covered, along with packages for Clang 3.1 and up. Some experimental and unstable packages are also provided for those that want prerelease versions of the software.
- 64-bit target
- 32-bit target
The prefix i686=32-bit x86_64=64-bit shows what kind of binaries the toolchain builds. The suffix shows what OS the toolchain is built for. If you need to build 32-bit binaries on Windows, it is recommended to use the i686…win32 package.
- MinGW-builds: high quality toolchains, providing dual-target builds(host=x32 -> target=x32/x64 & host=x64 -> target=x64/x32). GCC 4.6.2 and up is covered. The builds are divided into two categories: stable and unstable. Also, the builds provide two models of threads: posix/win32. In addition to this, you can select dwarf/sjlj/seh builds at your choice. And one more important feature of the builds is that the builds include python interpreter built within the MinGW-builds project, and which is used for the ‘GDB pretty-printers’. Also provides other useful packages.
- 64-bit target
- 32-bit target
The prefix x32=32-bit x64=64-bit shows what kind of binaries the toolchain builds. If you need to build 32-bit binaries on Windows, it is recommended to use the x32 package.
- Automated builds: produced regularly, as often as possible. These will use upstream GCC versions and may not be very stable at times, but these are tested to at least function. The binary packages do not include optional mingw-w64 SDKs, including the DXSDK and DDK.
- 64-bit target
- 32-bit target
- TDM-GCC: TDM, who also catered updated GCC installers for mingw.org, supports a mingw-w64 toolchain. Be sure to read the Getting Started page. This is of course not usable for cross-compilation. Please understand TDM uses nonstandard patching that makes his builds binary incompatible with all other builds without these patches.
For linux, see below.
Windows native
TDM-GCC comes with an easy installer, please use that. The other builds are quite straightforward to set up:
- extract the toolchain to a directory: 32-bit mingw-w32: eg
C:mingw32
so thatC:mingw32bin
contains i686-w64-mingw32-gcc.exe 64-bit mingw-w64: egC:mingw64
so thatC:mingw64bin
contains x86_64-w64-mingw32-gcc.exe - open a cmd.exe and do
set PATH=C:mingw64bin;%PATH%
for 64-bit building.set PATH=C:mingw32bin;%PATH%
for 32-bit building. - You should be ready to go. Execute
i686-w64-mingw32-gcc -v
orx86_86-w64-mingw32-gcc -v
to see that everything has gone well. - (Autobuilds only) If you need mingw32-make, please download it from the mingw-w64 downloads site under External binary packages.
Linux
Several distributions already provide mingw64 packages:
- Arch (AUR): https://aur.archlinux.org/packages.php?ID=53926
- Debian: http://packages.debian.org/sid/mingw-w64 and related packages.
- Fedora: https://fedoraproject.org/wiki/MinGW/Tutorial
- Ubuntu: http://packages.ubuntu.com/source/lucid/mingw-w64 and related packages
The toolchain consists of compilers, linkers assemblers and supporting utilities (comparable to what you get with the Windows SDK. It does not include an IDE.
If you need to compile GNU software which requires the use of a configure script for Windows, see [MSYS].
CMake can be used for generating «MinGW Makefiles», which of course work fine for mingw-w64/w32.
Для работы над заданиями курса в Windows 10 рекомендуется использовать следующее программное окружение:
- Редактор Visual Studio Code
- Инструменты командной строки Git for Windows
- Среда разработки MinGW-w64 (Minimalist GNU for Windows), содержащая компилятор GCC (GNU Compiler Collection)
- Инструменты для сборки проектов CMake
- Система управления пакетами python Miniconda3
Рассмотрим процесс установки и настройки этих инструментов.
Установка VS Code
Установка VS Code не представляет сложностей. Достаточно скачать установочный файл со страницы загрузок и запустить его. Пока это все, что необходимо сделать. После установки остальных программ мы вернемся к настройке VS Code.
Установка и настройка Git for Windows
Скачайте установочный файл Git for Windows со страницы загрузок и запустите его. На момент написания этого текста актуальной версией является 2.28.0. В процессе установки Вам будут заданы вопросы по конфигурации. В большинстве случаев подойдут рекомендуемые варианты.
Если в системе уже установлен редактор VS Code, то его можно выбрать в качестве редактора по умолчанию для Git:
Важным моментом является настройка обработки конца строки в файлах. Чтобы с этим не возникало проблем, необходимо выбрать вариант, который уже отмечен по умолчанию:
Чтобы команды git были доступны во всех терминалах, следует выбрать рекомендуемый вариант для изменения переменной окружения PATH:
Проверьте, что установка завершилась успешно, открыв терминал и исполнив команду git
. Результат должен выглядеть так:
> git
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path]
[--info-path] [-p | --paginate | -P | --no-pager]
[--no-replace-objects] [--bare] [--git-dir=<path>]
[--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
В качестве терминала в Windows 10 мы рекомендуем использовать PowerShell.
Теперь необходимо задать имя пользователя и адрес электронной почты:
> git config --global user.name "Ivan Petrov"
> git config --global user.email i.petrov@nsu.ru
Git хранит настройки в файле ~.gitconfig
. У автора этот файл выглядит следующим образом:
[user]
email = vit.vorobiev@gmail.com
name = Vitaly Vorobyev
[core]
editor = "[path-to-vscode]" --wait
На этом первоначальная конфигурация инструментов git завершена. Навык работы с git приходит с практикой. Действия с git, необходимые для выполнения заданий курса, всегда будут подробно описаны. Тем не менее, мы рекомендуем обращаться к документации, чтобы прояснять непонятные моменты.
Установка MinGW-w64
Установочный файл MinGW-w64 mingw-w64-install.exe
можно найти на этой странице. При установке не нужно менять настройки по умолчанию, кроме пути установки. Путь установки не должен содержать пробелов, поэтому путь по умолчанию в директории Program Files
не подходит.
После завершения установки, в директории mingw32bin
будут расположены различные исполняемые файлы. Среди них нас интересует файл g++.exe
, который запускает сборку программ C++. Сделаем так, чтобы этот файл был доступен в любой директории из командной строки. Если этого не сделать, то для использования команды g++
надо будет прописывать полный путь до файла g++.exe
.
Откройте меню “Система” в “Панели управления”:
Из меню “Система” перейдите в “Дополнительные параметры системы”:
Выберите “Переменные среды”:
Выберите переменную Path
и нажмите кнопку “Изменить…”:
Добавьте в новую строку полный путь до директории mingw32bin
и нажмите кнопку OK.
Чтобы проверить, что настройка выполнена успешно, откройте консоль (не в директории mingw32bin
) и выполните команду g++ --help
:
> g++ --help
Usage: g++.exe [options] file...
Ваша система теперь готова к сборке программ на языке C++.
Установка CMake
Скачайте со станицы загрузок установочный файл cmake-3.18.1-win64-x64.msi
(на момент написания текста актуальная версия — 3.18.1). Для 32-разрядной системы вместо этого нужно скачать файл cmake-3.18.1-win32-x86.msi
. Запустите файл и выполните установку. В ходе установки выберите изменение переменной окружения PATH:
Выполните в консоли команду cmake --help
для проверки корректности установки CMake:
> cmake --help
Usage
cmake [options] <path-to-source>
cmake [options] <path-to-existing-build>
cmake [options] -S <path-to-source> -B <path-to-build>
Specify a source directory to (re-)generate a build system for it in
the current working directory. Specify an existing build directory to
re-generate its build system.
Код большинства заданий по C++ этого курса будет компилироваться с помощью CMake. Эта система значительно упрощает процесс сборки C++ проектов, особенно если они состоят из многих файлов.
Установка Miniconda3
Система Windows (в отличие от Linux) не имеет установленного по умолчанию интерпретатора python. Менеджер пакетов python Anaconda и его минимальная сборка Miniconda позволят нам установить в системы все необходимые инструменты для работы с python. Загрузите со страницы загрузки установочный файл Miniconda3 Windows 64-bit
или Miniconda3 Windows 32-bit
, в зависимости от разрядности системы. При установке отметьте галочку для добавления необходимых записей в переменную окружения PATH, несмотря на то что это действие не рекомендуется установщиком:
Убедитесь в том, что установка выполнена успешно, выполнив в консоли следующую команду:
>conda --help
usage: conda-script.py [-h] [-V] command ...
conda is a tool for managing and deploying applications, environments and packages.
Выполните инициализацию (необходимо выполнить один раз):
Создайте окружение для работы с заданиями этого курса:
>conda create -n nsu python=3
Conda вычислит набор пакетов, которые необходимо установить в новом окружении, и попросит подтвердить создание окружения:
После установки активируйте новое окружение и запустите консоль python:
>conda activate nsu
(nsu) >python
Python 3.8.5 (default, Aug 5 2020, 09:44:06) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Ваша система теперь готова для работы с заданиями курса “Программирование на C++ и python”. Нам осталось настроить редактор VS Code для максимально удобной работы.
Настройка VS Code
Установите следующие расширения VS Code:
- C/C++ for Visual Studio Code
- CMake Tools
- Python
Выбор интерпретатора python
При начале работы с кодом python (при открытии файла с расширением .py
) VS Code предложит выбрать интерпретатор python, который будет использоваться для подсветки кода, проверки синтаксиса и вывода подсказок:
Можете, например, выбрать интерпретатор из недавно созданного окружения nsu.
Создадим файл test.py
, содержащий одну строку:
Исполнить этот скрипт можно, открыв консоль в VS Code с помощью сочетания клавиш Ctrl+J
и набрав в ней
В правом верхнем углу окна находится кнопка с зеленым треугольником ▷, нажатие на которую приводит к тому же результату:
Настройка работы с GCC
Создайте файл test.cpp
, содержащий следующий код:
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
Скомпилируем его с помощью компилятора GCC и командной строки. Откройте консоль в VS Code (Ctrl+J
) и исполните команду
Компилятор создал исполняемый файл a.exe
. Запустите его:
Работает. Настроим теперь VS Code для автоматизации этого действия. Выберите в меню пункт Terminal -> Configure Default Build Task...
:
Выберите из выпавшего списка пункт g++.exe
. В результате будет сгенерирован файл .vscode/tasks.json
подобный такому:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: cpp.exe build active file",
"command": "D:\mingw\mingw32\bin\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
Теперь при нажатии клавиш Ctrl+Shift+B
или выборе пункта меню Terminal -> Run Build Task
будет выполняться компиляция открытого файла. Для файла test.cpp
будет создан исполняемый файл test.exe
.
Работа с CMake
Откройте новую рабочую директорию VS Code, создайте в ней файл main.cpp
, содержащий следующий код:
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
и файл CMakeLists.txt
со следующим содержанием:
cmake_minimum_required(VERSION 3.0.0)
add_executable(test main.cpp)
Эти два файла составляют минимальный CMake-проект. Выполним сначала сборку CMake-проекта через консоль: создайте в рабочей директории поддиректорию build
, в которой будет осуществляться сборка, и перейдите в неё:
Выполните настройку проекта и запустите сборку:
> cmake -G "MinGW Makefiles" ..
> cmake --build .
В первой команде мы указали, что сборка будет осуществляться с помощью MinGW и что файлы проекта расположены в родительской директории (путь ..
). Вторая команда осуществляет сборку в текущей директории (путь .
). В директории build
должен появиться исполняемый файл test.exe
.
Расширение VS Code для работы с CMake позволяет автоматизировать сборку проекта. Выберите рабочую директорию VS Code (комбинация клавиш Ctrl+K+O
), содержащую файлы main.cpp
и CMakeLists.txt
. Наберите комбинацию клавиш Ctrl+Shift+P
и в строке сверху наберите команду >CMake: Configure
. Это запустит настройку инструментов CMake. После завершения настройки в нижней части окна появятся инструменты управления сборкой:
Кнопку “Сборка” запускает сборку, а кнопка ▷ — исполняемый файл.
Если автоматическая настройка CMake привела к ошибке, то, вероятно, инициализация CMake выполнилась без параметра -G "MinGW Makefiles"
. В этом случае выполните эту команду в консоли, как показано выше. Достаточно выполнить это действие один раз, после чего конфигурация этого и других проектов будет выполняться верно.
Работа с git
Покажем как можно работать с git-репозиторием через VS Code. Выполните fork репозитория задания Hello, Classroom
на GitHub:
Это действие создает новый репозиторий в Вашем аккаунте. Разрешите автоматическое тестирование решения, нажав на большую зеленую кнопку во вкладке Actions:
Новый репозиторий необходимо клонировать на Вашу локальную систему. Удобнее всего это делать с помощью протокола ssh. Для этого сначала необходимо включить OpenSSH Client, который по умолчанию выключен.
Взаимодействие с GitHub репозиторием будет происходить по протоколу ssh с помощью техники шифрования с открытым ключом. Создать пару из приватного и публичного ключа можно в консоли:
>ssh-keygen
Generating public/private rsa key pair.
По умолчанию сгенерированные ключи будут расположены в директории ~.ssh
. Файл с публичным ключом называется id-rsa.pub
. Публичный ключ нужно добавить на GitHub. Для этого откройте раздел SSH and GPG keys
в меню Settings
и нажмите на кнопку New SSH key
:
Заполните открывшуюся форму. В поле Key
нужно скопировать содержимое файла id-rsa.pub
. Проследите, чтобы при копировании не появились лишние переносы строк. Весь ключ должен быть расположен в одной строке.
Теперь мы готовы к клонированию репозитория. Выберите на компьютере директорию, в которой Вы будете работать с заданиями курса и перейдите в неё. Откройте страницу репозитория hello-classroom
в Вашем аккаунте GitHub и скопируйте строку для клонирования через ssh:
Выполните в консоли команду git clone
:
> git clone git@github.com:fakestud/hello-classroom.git
Cloning into 'hello-classroom'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 15 (delta 0), reused 15 (delta 0), pack-reused 0
Receiving objects: 100% (15/15), done
Строка git@github.com:fakestud/hello-classroom.git
есть скопированная выше строка. Репозиторий был клонирован в директорию hello-classroom
. Выберите её в качестве рабочей директории VS Code. Прочитайте файл README.md
, содержащий инструкции по решению задания. После решения задания выполните локальную проверку:
> conda activate nsu
> pip install -r .requirements.txt
> g++ -std=c++17 main.cpp -o a.out
> test_cmd tests/ .a.out
Running 1 tests on 4 CPUs...
test1
Command: .a.out
Success
All 1 tests passed.
Тесты пройдены успешны. Значит, мы готовы к синхронизации репозитория GitHub с нашей локальной версией. В командной строке для этого достаточно выполнить следующие команды:
git add main.cpp
git commit -m "Task solved"
git push -u origin master
Редактор VS Code позволяет выполнить эти действия через графический интерфейс. VS Code отслеживает изменения локальной версии репозитория. Откройте вкладку контроля версий слева и посмотрите на список изменившихся файлов. В нашем случае это должен быть только файл main.cpp
. Выполните команду git add
, нажав на кнопку +:
Затем команду git commit
, нажав на кнопку ✓ и введя комментарий в текстовом поле:
Наконец, выполните команду git push
:
Источники
- First-Time Git Setup
- VS Code: User and Workspace Settings
- VS Code: Using GCC with MinGW
- VS Code: Get started with CMake Tools on Linux
- Git in Visual Studio Code
- Must-have плагины и несколько полезностей для СС++ разработки в VS Code
- Памятка пользователям ssh
MinGW also called as Minimalistic GNU for Windows is a popular compiler for C and C++ and used for the development of native MS-Windows applications. It does not depend on any 3rd party tools or libraries but relies on the several DLLs provided by Microsoft as components of the operating system. Out of these DLLs, MSVCRT.DLL i.e. Microsoft C runtime library is the primary one. Apart from the system components, the threaded applications must use freely distributable thread support DLL, provided as part of MinGW itself. You may consider using Cygwin for POSIX application deployment.
Below listed are the features and components provided by MinGW. You may also refer MinGW for more details.
- A port of the GNU Compiler Collection (GCC), including C, C++, ADA and Fortran compilers;
- GNU Binutils for Windows (assembler, linker, archive manager)
- A command-line installer, with optional GUI front-end, (mingw-get) for MinGW and MSYS deployment on MS-Windows
- A GUI first-time setup tool (mingw-get-setup), to get you up and running with mingw-get.
In this tutorial, we will install MinGW on windows and write, compile, and execute our Hello World program in C++.
Step 1 — Download MinGW
Go to the Download Page to start downloading mingw-w64. It will show various download options as shown in Fig 1.
Fig 1
Download MinGW-W64-builds as highlighted in Fig 1.
You may also download and install MinGW Installation Manager in case you are planning only for the 32-bit compiler. The MinGW-W64 provides both 32-bit and 64-bit compilers.
Fig 2
Download MinGW Installation Manager as highlighted in Fig 2.
Step 2 — Install MinGW-W64
Now execute the MinGW-W64-builds executable downloaded by us in the previous step. It will show the welcome screen as shown in Fig 3.
Fig 3
Click on the Next Button to continue with the installation. It will show the settings screen as shown in Fig 4.
Fig 4
Note that I have selected x86_64 architecture in order to support 64-bit instructions. You may continue with i686 for 32-bit instructions. Also, I have selected the posix option of Threads settings for programs involving multithreading. You may select the win32 option based on your needs. Now click on the Next Button to continue with the installation. The next screen asks for the installation path as shown in Fig 5.
Fig 5
Make sure that you provide an installation path without any spaces. Now click on the Next Button to finish the installation.
It might show you error specific to fail to download. I tried a few times and got success in 3rd attempt. You may also continue with manual installation in case it failed multiple times. You can simply download the archive of MinGW-W64 and extract it to the desired location.
It will show the download progress and status as shown in Fig 6, Fig 7, and Fig 8.
Fig 6
Fig 7
Fig 8
Now click on the Next Button after download completes. It will show the success message as shown in Fig 9.
Fig 9
Click on the Finish Button to close the installer. Now add the bind directory of MinGW-W64 to the system path as shown in Fig 10.
Fig 10
Step 3 — Install MinGW
In this step, we will install the MinGW distributed by the official website as shown in Fig 2. Execute the installer downloaded in previous steps. It will show the welcome screen as shown in Fig 11.
Fig 11
Click on the Install Button to start the installation. It will ask for the installation directory as shown in Fig 12.
Fig 12
Click on the Continue Button to start the installation. It will show the progress as shown in Fig 13 and Fig 14.
Fig 13
Fig 14
Click on the Continue Button to launch the installation manger as shown in Fig 15.
Fig 15
Choose the package GCC as shown in Fig 16.
Fig 16
Click on the Apply Button to apply the changes as shown in Fig 17.
Fig 17
Click on the Apply Changes Button. It will show the confirmation message as shown in Fig 18.
Fig 18
Click on the Apply Button to install GCC. It will show the Package progress as shown in Fig 19 and Fig 20.
Fig 19
Fig 20
Click on the Close Icon and also close the installation manager to complete the installation of the compiler required to compile the programs.
You may add the MinGW path to bin directory which is C:cppmingwbin in my case to system path as we did for MinGW-W64. Make sure that you keep only one compiler path at a time among MinGW and MinGW-W64.
Step 4 — Getting started with C — Hello World
Write your first C program as shown below and save in a file hello.c.
#include<stdio.h>int main() {
printf( "Hello World" );
}
Compile and execute the program using the command as shown below.
# Compile and make executable
gcc hello.c -o hello.exe
It will compile the program and generate the executable i.e. hello.exe. We can simply type hello to execute the program. It will print Hello World on the console as shown in Fig 21.
Fig 21
Step 5 — Getting started with C++ — Hello World
We can repeat the previous step to write the Hello World program in C++. Write your first C++ program as shown below and save it to hello.cpp.
#include<iostream>using namespace std;
int main() {
cout << "Hello World";
return 0;
}
Compile and execute the program using the command as shown below.
# Compile and make executable
g++ hello.cpp -o hello.exe
It will compile the program and generate the executable i.e. hello.exe. We can simply type hello to execute the program. It will print Hello World on the console as shown in Fig 22.
Fig 22
This is how we can install MinGW and MinGW-W64 and configure the system path to access the executables from the command line. We also wrote our first C and CPP programs, compiled and executed them to print Hello World on the console.
MinGW, a contraction of “Minimalist GNU for Windows”, is a minimalist development environment for native Microsoft Windows applications.
Downloading MinGW
- open http://www.mingw.org/
- Click Download Button as shown in the picture below.
3. As soon as you click download button on mingw website The following page will open in your browser (from the SourceForge.net web site).
4. The following exe file will be downloaded with the name mingw-get-setup.exe
5. Click mingw-get-setup.exe
6. Click install
7. Click continue
8. Click continue
9. The following pop-up window will appear. Pleas make sure that you selected all the check-boxes. e.g. mingw32-base, mingw32-gcc=g++, msys-base and so on.
10. Click on Installation > Apply Changes as shown in the picture below.
11. wait for the process to complete. once you see successful installation message close the window. Click Close.
12. Now we will set environment variable to use gcc and g++ command from terminal.
Windows 10 and Windows 8
- In Search, search for and then select: System (Control Panel)
- Click the Advanced system settings link.
- Click Environment Variables. In the section System Variables, find the
PATH
environment variable and select it. Click Edit. If thePATH
environment variable does not exist, clickNew
.
- In the Edit System Variable (or New System Variable) window, specify the value of the
PATH
environment variable. - Copy C:MinGWbin .
- Click OK.
- Close all remaining windows by clicking OK.
- Reopen Command prompt window, and type
gcc
. if you see the following output as shown in the picture below the mingw is installed successfully.
Video : How To install MinGW on Windows 10 (GCC & G++)
- MinGW