MSYS против MinGW: внутренние переменные среды

MSYS2 по умолчанию shell (bash) может быть запущен выбор из трех пусковых установок, которые также устанавливают переменную окружения MSYSTEM. В частности:

  1. msys2_shell.bat С MSYS
  2. mingw64_shell.bat С MINGW64 и
  3. mingw32_shell.bat С MINGW32.

помимо подсказки оболочек, видимыми различиями являются:

  • существует эквивалентная переменная оболочки $MSYSTEM экспортируется;
  • uname вывод основан на $MSYSTEM;
  • , когда $MSYSTEM is MINGW*, /mingw*/bin это первый путь в $PATH.

предполагая, что у нас есть /usr/bin/gcc, /mingw64/bin/gcc, /mingw32/bin/gcc, разумное следствие установленного значения $MSYSTEM заключается в том, что мы будем использовать другой компилятор, генерирующий другой двоичный файл (POSIX или native 32/64).

  • каковы другие существенные различия определяются $MSYSTEM значение?
  • существуют ли двоичные файлы, которые используют эту переменную?
  • Is pacman зависит от подсистемы?

3 ответов


следующее извлекается из в должности Рэй Доннелли, участник MinGW-w64. Он проясняет этот вопрос и является важной преамбулой к моему вопросу.

есть 3 системы, MSYS2 и 32-разрядные и 64-разрядные собственные системы Windows. Каждая система имеет свой собственный репозиторий программных пакетов в дистрибутиве MSYS2. [... это важное различие между ними. MSYS2 реализует пространство имен файловой системы POSIX-y FHS, и это очень важно для многих вещей.
[...] 32-разрядные и 64-разрядные системы MinGW-w64 являются родным программным обеспечением Windows, которые коренятся в /mingw32 и /mingw64 соответственно. Это не так, как мы заменили каждый вызов API Linux; большинство вышестоящих проектов делают эту работу для нас, так как они уже предоставляют порты Windows, Но да, иногда мы должны это делать. Мы также добавляем специальные исправления перемещения во многие программы, чтобы вы могли установить root все это (например ,C:\msys64) везде, где вы хотите. Программное обеспечение MSYS2 не нуждается в этих исправлениях (поскольку собственное местоположение Windows является скрытой деталью установки), но программное обеспечение MinGW-w64 часто делает это.
[F] rom с точки зрения конечного пользователя, есть только 2 системы, MSYS2 и XX-битная собственная Windows, и да, некоторые пакеты существуют для обеих этих систем. В частности, MSYS2 существует для запуска средств разработки, необходимых для создания собственного программного обеспечения Windows, поэтому, если системе сборки требуется версия Msys2 Python или Perl для работы правильно (потому что он предполагает FHS или что-то еще), тогда нам нужно предоставить эти пакеты. Мы никогда не добавляем пакеты MSYS2, не убедившись, что они нужны. Если вы не знаете, что вам нужна версия MSYS2, а затем установите соответствующий собственный Windows one вместо этого.
Примером того, когда вам понадобится Msys2 Python, является использование инструментов РЕПО Google. Это связано с тем, что repo использует модуль fcntl Python, и этот модуль существует только в системах POSIX-Y. IMHO Python делать плохую работу по абстрагированию ОС здесь, и это фундаментальная вещь, которую должен делать язык сценариев, и fcntl (и pyWin32) не должен существовать, но я не босс Python.
К счастью, Pacman имеет управление зависимостями и установит материал, необходимый для любых пакетов, которые вас действительно интересуют.
GNU Autotools никогда не будет работать хорошо, кроме как через FHS-совместимую систему с оболочкой POSIX, и это, естественно, приводит к другим инструментам, которые должны существовать в такое же пространство имен файловой системы, как make, perl, m4, bison, flex и т. д.

учитывая Рэй Доннелли пост, то, что составляет систему, в первую очередь PATH переменная, потому что в зависимости от приоритетов каталога инструменты РЕПО Google будут построены с пакетами MSYS2 или MinGW. На самом деле shell скрипт, который переключается между оболочками MSYS2 и MinGW, экспортирует переменную окружения MSYSTEM со своим аргументом mingw32|mingw64|msys и источник /etc/profile. Последний, в свою очередь, устанавливает PATH исходя из стоимости MSYSTEM. По большому счету для MSYS2 PATH is /usr/local/bin:/usr/bin:/bin, в то время как для MinGW 64 он /mingw64/bin:/usr/local/bin:/usr/bin:/bin, поэтому работает gcc компиляторы будут выполнять версию MSYS2 или MinGW соответственно. Есть и другие незначительные env. переменные тоже, например MANPATH читать соответствующие инструкции, как только будут вызваны соответствующие двоичные файлы, или PKG_CONFIG_PATH читать правильные файлы lib, при строительстве.

в отношении pacman это не совсем верно, что это не влияет, как из комментария @ David Grayson. MSYS2 wiki смутно подтверждает, что:

используйте оболочку msys2 для запуска pacman, makepkg, makepkg-mingw и для создания POSIX-зависимого программного обеспечения, которое вы не собираетесь распространять. Используйте оболочки mingw для создания собственного программного обеспечения и других задач.

Рэй Доннелли снова разъясняет вещи в другом в должности :

вообще говоря, вы можете использовать любую оболочку для pacman, но вы можете столкнуться с некоторыми проблемами с использованием оболочек mingw, где в зависимости от того, какие пакеты вы установили в /mingw32 или /mingw64, сценарии после установки пакетов (которые являются произвольными сценариями bash) могут запустить неожиданный вариант программы mingw-w64. Конкретным примером этого может служить "sed". Итак, запуск pacman из msys2_shell.bat избегает класса потенциальных проблем (хотя мы попытаемся исправить все, что сообщается в любом случае).

резюме вверх:

каковы другие существенные различия определяются $MSYSTEM значение?
Непосредственные существенные различия заключаются в связанных значениях переменных пути, идентифицированных @David Grayson.

существуют ли двоичные файлы, которые используют эту переменную?
Кажется безопасным сказать, что нет конкретного двоичного чтения напрямую $MSYSTEM, но много использования программного обеспечения / чтения переменных пути выше на основе $MSYSTEM.

Is pacman зависит от подсистемы?
Да.


цель трех вариантов заключалась в том, чтобы дать вам возможность использовать две разные среды разработки:

  1. MinGW: предназначен для разработки собственных приложений Windows. Это далее делится на:

    • Mingw32 для производства 32-битных исполняемых файлов и, конечно,
    • Mingw64 для создания 64-битных исполняемых файлов

    подумайте об этом как о том, где вы будете заниматься разработкой конечного пользователя. Программное обеспечение, которое не обычно выполняется внутри самой среды MSYS2.

  2. MSYS: предназначен для создания приложений, которые будут работать в среде posix-y с именем файловой системы в стиле FHS. Подумайте об этом как о том, где вы будете делать разработку для инструментов, которые фактически работают внутри Msys2. Или вы можете думать об этом, как о Cygwin.

вы можете получить более подробную информацию по этому вопросу в этой теме на MSYS2 на SourceForge форум.


вы должны посмотреть в /etc/profile (который приезжает из этот файл на GitHub). Там вы можете видеть, что MSYSTEM влияет:

  • PATH
  • PKG_CONFIG_PATH
  • ACLOCAL_PATH
  • MANPATH
  • MINGW_MOUNT_POINT

кроме того, есть pull-запрос добавляет /etc/profile/msystem, который будет скриптом, который устанавливает дополнительные переменные на основе MSYSTEM.