| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| msys2_mingw [2024/03/05 11:03] – [Пишем программы] admin | msys2_mingw [2026/06/03 09:48] (current) – [Интеграция MSYS2 и VSCode] admin |
|---|
| Вы еще тут ? Я еще держусь, но с трудом... :) | Вы еще тут ? Я еще держусь, но с трудом... :) |
| |
| **ПРИМЕЧАНИЕ:** С мая 2020 32-битную **MSYS2** стали [[https://www.msys2.org/news/#2020-05-17-32-bit-msys2-no-longer-actively-supported|потихоньку сворачивать]]. Она еще поддерживается, но пакеты для нее выходят крайне редко, а начальный инсталлятор для 32-битной версии **MSYS2** убрали с главной стравницы [[http://repo.msys2.org/distrib/i686/|сюда]]. Следите за [[https://www.msys2.org/news/|новостями]]. Таким образом, даже для сборки 32-битных приложений нужно использовать 64-битную ОС и 64-битную ''MSYS2''. Этакая кросс-система. Увы. | **ПРИМЕЧАНИЕ:** С мая 2020 32-битную **MSYS2** стали [[https://www.msys2.org/news/#2020-05-17-32-bit-msys2-no-longer-actively-supported|потихоньку сворачивать]] также как и поддержку старых систем Windows 7 и Windows 8. Они еще поддерживается, но пакеты для них выходят крайне редко, а начальный инсталлятор для 32-битной версии **MSYS2** убрали с главной стравницы [[http://repo.msys2.org/distrib/i686/|сюда]]. Следите за [[https://www.msys2.org/news/|новостями]]. Таким образом, даже для сборки 32-битных приложений нужно использовать 64-битную ОС и 64-битную ''MSYS2''. Этакая кросс-система. Увы. |
| |
| [[https://www.msys2.org/news/#2022-04-06-windows-7-8-support-will-be-dropped-late-2022-or-early-2023|2022-04-06 - Windows 7 / 8 support will be dropped late 2022 or early 2023]] | [[https://www.msys2.org/news/#2022-04-06-windows-7-8-support-will-be-dropped-late-2022-or-early-2023|2022-04-06 - Windows 7 / 8 support will be dropped late 2022 or early 2023]] |
| под Windows-консоль. А вот хрен вам! Оказывается, теперь есть НЕ ОДИН компилятор, точнее не одна build-система (среда, namespace e.t.c.), а несколько. | под Windows-консоль. А вот хрен вам! Оказывается, теперь есть НЕ ОДИН компилятор, точнее не одна build-система (среда, namespace e.t.c.), а несколько. |
| Из них первая - для компиляции программ под __САМУ__ **MSYS2** (вы же помните, что она тащит за собой теперь как | Из них первая - для компиляции программ под __САМУ__ **MSYS2** (вы же помните, что она тащит за собой теперь как |
| минимум DLL ''msys-2.0.dll'' и работает с UNIX-путями), а остальные build-системы - для обычных "голых" Windows программ, | минимум DLL ''msys-2.0.dll'' и работает с UNIX-путями?), а остальные build-системы - для обычных "голых" Windows программ, |
| как в старом добром **Mingw**. Компилятор и там и там - знакомый **Mingw-w64**, но по-разному настроенный. Да, | как в старом добром **Mingw**. Компилятор и там и там - знакомый **Mingw-w64**, но по-разному настроенный. Да, |
| не забываем что всё это может существовать в 32-бит, 64-бит и все комбинации между ними! | не забываем что всё это может существовать в 32-бит, 64-бит и все комбинации между ними! |
| Давайте запустим "MSYS2 MinGW 32bit". Вот теперь у нас доступен нужный компилятор **gcc**, причем он полностью | Давайте запустим "MSYS2 MinGW 32bit". Вот теперь у нас доступен нужный компилятор **gcc**, причем он полностью |
| настроен, с указанием папки ''include'', линкера и пути к библиотекам. Ура! | настроен, с указанием папки ''include'', линкера и пути к библиотекам. Ура! |
| | |
| | Если нам надо понять, какое у нас сейчас окружение, то можно посмотреть переменную ''MSYSTEM'', например там будет ''MSYSTEM=MINGW32'' . |
| |
| ==== Пишем программы ==== | ==== Пишем программы ==== |
| Надо сказать, что современных реализаций библиотеки curses есть целых две. Одна из них - ncurses, другая - pdcurses. Давайте установим ncurses для нашей 32-битной сборки: ''pacman -S mingw-w64-i686-ncurses''. | Надо сказать, что современных реализаций библиотеки curses есть целых две. Одна из них - ncurses, другая - pdcurses. Давайте установим ncurses для нашей 32-битной сборки: ''pacman -S mingw-w64-i686-ncurses''. |
| |
| **ПРИМЕЧАНИЕ**: Как было написано выше, управление консолью в Windows устроено совсем иначе, чем в UNIX, так что не обходится без глюков. Библиотека ncurses реализована таким образом, что она "чувствует", под какой консолью она работает и включает "магию". Если мы запускаем одну и ту же прогрмамму под UNIX-подобной консолью, она начинает управлять экраном через ESC-последовательности, а если из CMD или PowerShell - через API Windows Console. Но фокус в том, что для ESC-последовательностей нужна база терминалов, а она не всегда доступна. Это дает неприятный результат: программа на ncurses неадекватно работает из "оболочки" **MSYS2 Mingw** в которой мы ее только что откомпилировали. А из обычных CMD или PowerShell работает нормально. Как это обойти ? Если нужна программа для среды **MSYS2** - скомпилируйте ее в оболочке **MSYS2 MSYS** с ее библиотеками, а если "чистая виндовая" - в среде **MSYS2 Mingw**. | **ПРИМЕЧАНИЕ**: Как было написано выше, управление консолью в Windows устроено совсем иначе, чем в UNIX, так что не обходится без глюков. Библиотека ncurses реализована таким образом, что она "чувствует", под какой консолью она работает и включает "магию". Если мы запускаем одну и ту же прогрмамму под UNIX-подобной консолью, она начинает управлять экраном через ESC-последовательности, а если из CMD или PowerShell - через API Windows Console. Но фокус в том, что для ESC-последовательностей нужна база терминалов, а она не всегда доступна. Это дает неприятный результат: программа на ncurses неадекватно работает из "оболочки" **MSYS2 Mingw64** в которой мы ее только что откомпилировали. А из обычных CMD или PowerShell работает нормально. Как это обойти ? Если нужна программа для среды **MSYS2** - скомпилируйте ее в оболочке **MSYS2 MSYS** с ее библиотеками, а если "чистая виндовая" - в среде **MSYS2 Mingw64**. |
| |
| Давайте создадим простую ncurses программу для Windows (конечно же статическую): | Давайте создадим простую ncurses программу для консоли Windows (конечно же статическую): |
| |
| #include <curses.h> | #include <curses.h> |
| Это неудивительно, так как полученная программа требует для своей работы ''SDL2.DLL'', | Это неудивительно, так как полученная программа требует для своей работы ''SDL2.DLL'', |
| а она пока доступна только "изнутри" среды **MSYS2**. Можно пойти двумя путями: первый - установить | а она пока доступна только "изнутри" среды **MSYS2**. Можно пойти двумя путями: первый - установить |
| ''SDL2.DLL'' "в систему", второй: просто положить ''SDL2.DLL'' в каталог с программой. Тогда за | ''SDL2.DLL'' "в систему" (в C:\Windows\System32), второй: просто положить ''SDL2.DLL'' в каталог с программой. Тогда за |
| счет известной особенности Windows "use local DLL" программа при запуске найдет нужную | счет известной особенности Windows "use local DLL" программа при запуске найдет нужную |
| DLL и подключит. Скачаем нужный runtime (например 32-битный) на сайте | DLL и подключит. Скачаем нужный runtime (например 32-битный) на сайте |
| |
| Наконец, существует возможность - использовать уже знакомую нам SDL2 для "склейки" операционной | Наконец, существует возможность - использовать уже знакомую нам SDL2 для "склейки" операционной |
| системы и OpenGL. Это намного удобнее т.к. в SDL2 имеются функции ввода, управления | системы и OpenGL вместо GLU или GLUT. Это намного удобнее т.к. в SDL2 имеются функции ввода, управления |
| манипуляторами, звуком, сетью и т.д. и самое главное - обе библиотеки кросс-платформенные. | манипуляторами, звуком, сетью и т.д. и самое главное - обе библиотеки кросс-платформенные. |
| |
| |
| https://ps-group.github.io/opengl/lesson_1 | https://ps-group.github.io/opengl/lesson_1 |
| | |
| | ==== QT ==== |
| | |
| | Еще одна популярная кроссплатформанная библиотека. |
| | |
| | Среди пакетов MSYS2 имеется IDE QtCreator |
| | |
| | Параграф не написан. |
| | |
| | https://wiki.qt.io/MSYS2 |
| | |
| |
| ==== Интеграция MSYS2 и VSCode ==== | ==== Интеграция MSYS2 и VSCode ==== |
| Запускать VSCode надо прямо из папки (workspace), в которой мы ведем разработку, то есть "''cd myproject ; Code . &''" (обратите внимание на точку ''.'' что означает: взять текущий каталог как workspace. Знак ''&'' применяется для запуска VSCode в фоне и "отсоединения" консоли). При первом запуске будет создан подкаталог ".vscode" в котором будут лежать файлы .json конфигурации проекта. | Запускать VSCode надо прямо из папки (workspace), в которой мы ведем разработку, то есть "''cd myproject ; Code . &''" (обратите внимание на точку ''.'' что означает: взять текущий каталог как workspace. Знак ''&'' применяется для запуска VSCode в фоне и "отсоединения" консоли). При первом запуске будет создан подкаталог ".vscode" в котором будут лежать файлы .json конфигурации проекта. |
| |
| Для среды **MSYS2 MinGW 32bit** и т.д. VSCode во встроенном терминале будет использоваться PowerShell в качестве оболочки вместо ''sh'', поскольку мы собираем виндовую, независимую от **MSYS2** программу. (Если мы будем собирать под среду **MSYS2 MSYS** то будет использоваться родной ''sh''). | Для среды **MSYS2 MinGW 32bit** и т.д. VSCode во встроенном терминале будет использоваться PowerShell в качестве оболочки вместо ''bash'', поскольку мы собираем виндовую, независимую от **MSYS2** программу. (Если мы будем собирать под среду **MSYS2 MSYS** то будет использоваться родной ''bash''). |
| | |
| | Если все же надо запускать bash в терминале VSCode (например для make), то можно сконфигурировать: |
| | |
| | "terminal.integrated.profiles.windows": { |
| | "MSYS2 MINGW64": { |
| | "path": "C:\\msys64\\usr\\bin\\bash.exe", |
| | "args": ["--login", "-i"], |
| | "env": { |
| | "MSYSTEM": "MINGW32", |
| | "CHERE_INVOKING": "1", |
| | "MSYS2_PATH_TYPE": "inherit" |
| | } |
| | } |
| | }, |
| | "terminal.integrated.defaultProfile.windows": "MSYS2 MINGW64" |
| |
| [[https://code.visualstudio.com/docs/cpp/config-mingw|Get Started with C++ and MinGW-w64 and Visual Studio Code]] | [[https://code.visualstudio.com/docs/cpp/config-mingw|Get Started with C++ and MinGW-w64 and Visual Studio Code]] |