2016-05-26 54 views
10

MSYS2-Standard-Shell (Bash) kann gestartet werden, unter drei Launcher, die auch die Umgebungsvariable MSYSTEM festlegen. Im Einzelnen:MSYS vs. MinGW: interne Umgebungsvariablen

  1. msys2_shell.bat setzt es auf MSYS
  2. mingw64_shell.bat setzt es auf MINGW64 und
  3. mingw32_shell.bat setzt es auf MINGW32.

abgesehen von der Eingabeaufforderung Kesseln, die sichtbaren Unterschiede sind:

  • Es ist ein äquivalentes Shell-Variable $MSYSTEM exportiert;
  • uname Ausgabe basiert auf $MSYSTEM;
  • Wenn $MSYSTEMMINGW* ist, ist /mingw*/bin der erste Pfad in $PATH.

Angenommen, wir haben /usr/bin/gcc, /mingw64/bin/gcc, /mingw32/bin/gcc, eine sinnvolle Konsequenz des Sollwertes von $MSYSTEM ist, dass wir einen anderen Compiler zum Erzeugen eines unterschiedlichen binary (POSIX oder nativer 32/64) verwendet werden.

  • Was sind andere signifikante Unterschiede durch $MSYSTEM Wert bestimmt?
  • Gibt es Binärdateien, die diese Variable spezifisch verwenden?
  • Ist pacman vom Subsystem betroffen?

Antwort

9

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.

2

Sie sollten in /etc/profile suchen (die von this file on GitHub kommt). siehe Dort können Sie, dass MSYSTEM beeinflusst:

  • PATH
  • PKG_CONFIG_PATH
  • ACLOCAL_PATH
  • MANPATH
  • MINGW_MOUNT_POINT

Auch gibt ein pull request ist die /etc/profile/msystem fügt hinzu, welche wäre ein Skript, das zusätzliche Variablen basierend auf MSYSTEM setzt.

+0

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

+0

'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ß. –

5

Die Absicht hinter den drei Wahlen war die Möglichkeit, zwei verschiedene Entwicklungsumgebungen zu geben:

  1. MinGW: für die Entwicklung von nativen Windows-Anwendungen vorgesehen.Dies wird weiter unterteilt in:

    • Mingw32 für 32 Bit-Programme produzieren und natürlich
    • Mingw64 für 64 Bit-Programme produzieren

    Betrachten Sie das als, wo Sie Ihre Endbenutzer Entwicklung tun . Software, die normalerweise nicht innerhalb der MSYS2-Umgebung selbst ausgeführt wird.

  2. MSYS: beabsichtigt, Anwendungen zu erstellen, die in einer posix-y-Umgebung mit FHS-Stil-Dateisystembenennung arbeiten. Stellen Sie sich das vor, wenn Sie die Entwicklung für die Tools ausführen, die tatsächlich in Msys2 ausgeführt werden. Oder du kannst dir das vorstellen wie du Cygwin.

können Sie weitere Informationen erhalten, zu diesem Thema in this thread auf dem MSYS2 Source Forum.

+0

Ich war mir dessen schon bewusst, was meine Frage nicht speziell beantwortet. Jedenfalls Ray Donnelly Link. – antonio