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

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

  • msys2_shell.bat устанавливает значение MSYS
  • mingw64_shell.bat устанавливает значение MINGW64 и
  • mingw32_shell.bat устанавливает значение MINGW32.

Помимо приглашения оболочки, видимые различия заключаются в следующем:

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

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

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

Ответ 1

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

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

Учитывая сообщение Ray Donnelly, то, что составляет систему, является, прежде всего, переменной PATH, потому что, в зависимости от приоритетов каталога, инструменты репо Google будут созданы с пакетами MSYS2 или MinGW. Фактически shell script, который переключается между командами MSYS2 и MinGW, экспортирует переменную окружения MSYSTEM с ее аргументом mingw32|mingw64|msys и источниками /etc/profile. Последнее, в свою очередь, устанавливает PATH на основе значения MSYSTEM. В общем и целом, для MSYS2 PATH /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 shell для создания собственного программного обеспечения и других задач.

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

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

Подведение итогов:

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

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

Является ли pacman затронутым подсистемой?
Да.

Ответ 2

Целью трех вариантов было дать вам возможность двух разных сред разработки:

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

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

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

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

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

Ответ 3

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

  • PATH
  • PKG_CONFIG_PATH
  • ACLOCAL_PATH
  • MANPATH
  • MINGW_MOUNT_POINT

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