![Das Festlegen von Umgebungsvariablen in cmd hat keine Auswirkung](https://rvso.com/image/1481882/Das%20Festlegen%20von%20Umgebungsvariablen%20in%20cmd%20hat%20keine%20Auswirkung%20.png)
Ich versuche, Pfade zu VS-Tools einzurichten, um sie in der Befehlszeile auszuführen, wie inhttps://msdn.microsoft.com/en-us/library/x4d2c09s.aspx
Ich führe vcvarsall x64
die Eingabeaufforderung mit erhöhten Rechten aus und überprüfe den Inhalt der INCLUDE
Variablen:
Dann schließe ich die Eingabeaufforderung, öffne sie erneut und überprüfe die INCLUDE
Variable:
Wie Sie sehen, gingen die Änderungen verloren, als ich CMD geschlossen habe. Wie stelle ich sicher, dass sie in die Systemumgebung gelangen?
Ich verwende Win 8.1, falls das wichtig ist.
Antwort1
Dies liegt daran, dass die ausgeführten Batchdateien Set
zum Festlegen der Umgebungsvariablen verwendet werden ( C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\vcvars64.bat
das ist das, was beim Ausführen ausgeführt wird vcvarsall x64
).
Legt jedoch Set
nur Variablen für die aktuelle Befehlszeilensitzung fest. Sie müssen verwenden, Setx
damit es zwischen Befehlszeilensitzungen „haften bleibt“.
Weitere Informationen finden Sie in diesen anderen Fragen und Antworten von SU:
- Was sind PATH und andere Umgebungsvariablen und wie kann ich sie festlegen oder verwenden?
- Umgebungsvariable bleibt nicht hängen
- Legen Sie Umgebungsvariablen über die Befehlszeile fest – und sorgen Sie dafür, dass sie global beibehalten werden
- Was ist der Unterschied zwischen SETX und SET in Umgebungsvariablen in Windows
Nach Kommentaren bearbeiten:
„Aber die festgelegten Befehle waren im Standardskript“
VCVarsAll soll ausgeführt werden, um die Umgebung für den einzelnen Build/die einzelne Aktion einzurichten, die Sie gerade durchführen, und nicht, um sie dauerhaft festzulegen.
Visual Studio installiert spezielle „Eingabeaufforderungs“-Einträge für den Zugriff auf die Tools (aus Ihrem Link: „… und wählen Sie dann eine der Eingabeaufforderungen des nativen oder des übergreifenden Tools.“), und diese speziellen Eingabeaufforderungsverknüpfungen führen eine/die Batchdatei aus, um sicherzustellen, dass alles richtig eingestellt ist, wenn Sie diese Verknüpfungen verwenden.
Sie können diese Verknüpfungen mit Ihren eigenen replizieren ...
Erstellen Sie eine neue Verknüpfung zu cmd /k "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x64
, die die Batchdatei ausführt (mit x64 als Umgebungsoption), und lassen Sie dann das Befehlszeilenfenster geöffnet.
Verwenden Sie dann diese Verknüpfung, um die Eingabeaufforderung zu öffnen, wenn Sie die Tools verwenden möchten.
Antwort2
Ja, Sie können die Umgebung in eine Datei extrahieren:
cmd /C "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" && set > d:\t.txt
Dann können Sie diese Datei direkt in das Makefile einbinden oder eine andere Option verwenden, die Ihren Anforderungen entspricht.