Das folgende wird von Ray Donnelly post extrahiert, ein MinGW-W64-Beitrag. Es erleuchtet das Thema und ist wesentliche Präambel zu meiner Frage.
Es gibt 3 Systeme, MSYS2 und 32-Bit und 64-Bit Native Windows-Systeme. Jedes System verfügt über ein eigenes Repository mit Softwarepaketen in der MSYS2-Distribution. [...] das ist ein wichtiger Unterschied zwischen ihnen. MSYS2 implementiert einen POSIX-y FHS-Dateisystem-Namespace und das ist sehr wichtig für viele Dinge.
[...] Die MinGW-w64 32-Bit- und 64-Bit-Systeme sind Native Windows-Software, die auf/mingw32 bzw./mingw64 basieren. Es ist nicht so, dass wir jeden Linux-API-Aufruf selbst ersetzt haben. Die meisten Upstream-Projekte funktionieren für uns, da sie bereits Windows-Ports bereitstellen, aber manchmal müssen wir es tun. Wir fügen auch spezielle Umzugspatches zu einer Menge Software hinzu, so dass Sie das ganze Ding (z. B. C: \ msys64) überall installieren können, wo immer Sie wollen. Die MSYS2-Software benötigt diese Patches nicht (da der native Windows-Speicherort ein verborgenes Installationsdetail ist), aber die MinGW-w64-Software tut dies oft.
[F] Aus der Perspektive des Endbenutzers gibt es nur zwei Systeme, MSYS2 und das XX-Bit Native Windows, und ja, einige Pakete existieren für diese beiden Systeme. MSYS2 existiert speziell, um Entwicklungstools auszuführen, die zum Erstellen nativer Windows-Software erforderlich sind. Wenn ein Buildsystem eine MSYS2-Version von Python oder Perl benötigt, um korrekt zu funktionieren (weil FHS oder was auch immer vorausgesetzt wird), müssen diese Pakete bereitgestellt werden. Wir fügen MSYS2-Pakete niemals hinzu, ohne sicherzustellen, dass sie benötigt werden. Wenn Sie nicht wissen, dass Sie die MSYS2-Version von etwas benötigen, installieren Sie stattdessen das entsprechende Native Windows-System.
Ein Beispiel für die Verwendung von MSYS2 Python ist, wenn Sie versuchen, die Repo-Tools von Google zu verwenden. Dies liegt daran, dass Repo das fcntl-Python-Modul verwendet und dieses Modul nur auf POSIX-y-Systemen existiert. IMHO Python macht eine schlechte Arbeit, die Betriebssysteme hier zu abstrahieren, und das ist eine grundlegende Sache, die eine Skriptsprache tun sollte, und fcntl (und pyWin32) sollte nicht existieren, aber ich bin nicht der Chef von Python.
Glücklicherweise hat Pacman das Abhängigkeitsmanagement und installiert alles, was für Pakete benötigt wird.
GNU Autotools funktioniert nie gut, außer über ein FHS-kompatibles System mit einer POSIX-Shell, was natürlich zu anderen Tools führt im gleichen Dateisystem-Namespace, wie make, perl zu existieren, m4, Bison, flex etc etc.
Ray Donnelly Post gegeben, was ein System bildet, ist in erster Linie der PATH
Variable, denn je nach Verzeichnisprioritäten Die Repo-Tools von Google werden mit MSYS2- oder MinGW-Paketen erstellt. Das Skript shell
, das zwischen MSYS2- und MinGW-Shells umschaltet, exportiert die Umgebungsvariable MSYSTEM
mit dem Argument mingw32|mingw64|msys
und den Quellen /etc/profile
. Letzterer wiederum setzt den PATH
basierend auf dem Wert MSYSTEM
. Im Großen und Ganzen für MSYS2 ist die PATH
/usr/local/bin:/usr/bin:/bin
, während für MinGW 64 ist es /mingw64/bin:/usr/local/bin:/usr/bin:/bin
, daher laufen die gcc
Compiler MSYS2 oder MinGW-Version entsprechend ausführen. Es gibt andere kleinere env. Variablen auch, zum Beispiel MANPATH
, um die richtigen Handbücher zu lesen, sobald die richtigen Binärdateien aufgerufen werden, oder PKG_CONFIG_PATH
, um die richtigen lib-Dateien zu lesen, beim Erstellen.
In Bezug auf, pacman
ist es nicht völlig wahr, dass es nicht betroffen ist, wie aus @David Grayson kommentieren. MSYS2 wiki bekräftigt vage, dass:
Verwenden msys2 Shell für die Ausführung von Pacman, makepkg, makepkg-mingw und für POSIX-abhängige Entwicklung von Software, die Sie nicht beabsichtigen, zu verteilen. Verwenden Sie mingw-Shells zum Erstellen nativer Software und anderer Aufgaben.
Ray Donnelly klärt die Dinge wieder in einem anderen post:
Generell Sie jede Schale für Pacman verwenden können, aber man konnte einige Probleme laufen in mingw Schalen mit denen in Abhängigkeit davon, welche Pakete Sie‘ Wenn sie nach/mingw32 oder/mingw64 installiert sind, können die Nachinstallations-Skripte von Paketen (die beliebige Bash-Skripte sind) am Ende eine unerwartete mingw-w64-Variante eines Programms ausführen. Ein konkretes Beispiel dafür wäre "sed". Das Ausführen von pacman aus msys2_shell.bat vermeidet also eine Klasse potenzieller Probleme (obwohl wir versuchen würden, alle zu beheben, die ohnehin gemeldet werden).
Zusammengefasst:
Was sind andere bedeutende durch $MSYSTEM
Wert bestimmt Unterschiede?
Die unmittelbaren signifikanten Unterschiede liegen in den zugehörigen Werten der Pfadvariablen, die mit @David Grayson identifiziert wurden.
Gibt es Binärdateien, die diese Variable spezifisch verwenden?
Es scheint sicher zu sein, dass es keine spezifische binäre Lesung direkt $MSYSTEM
gibt, aber ein großer Teil der Software verwendet/liest die Pfadvariablen oben basierend auf $MSYSTEM
.
Ist pacman
vom Subsystem betroffen?
Ja.
Dies bedeutet, dass 'pkg-config' und' automake' während des make-Vorgangs nach '.pc' und' .m4' Dateien in '/ mingwXX' anstatt nach/usr' suchen können. Dies sollte auch den Pacman-Build-Prozess beeinflussen. Also wird sich die Ausgabe von 'Pacman' entsprechend' $ MSYSTEM' ändern? – antonio
'pacman' baut keine Pakete, es installiert sie nur. Sie können 'pacman' einfach gut laufen lassen, egal was '$ MSYSTEM' eingestellt ist, und' $ MSYSTEM' beeinflusst es nicht, soweit ich weiß. –