Forum: PC-Programmierung cmd.exe und bash


von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Hallo,
ich möchte unter Windows 10 mit CMake und MSVC Software bauen. Damit die 
MSVC Commandline Tools im Pfad sind, muss eine bat-Datei aufgerufen 
werden ("C:\Program Files (x86)\Microsoft Visual 
Studio\2017\Community\Common7\Tools\VsDevCmd.bat"). Ich möchte den Build 
gerne von der bash shell aus bedienen, die bei der Git Installation 
dabei war ("C:\Program Files\Git\git-bash.exe").

Mein Problem ist jetzt, die beiden zu "verheiraten". Ich möchte also 
eine gestartete bash haben, in der die Umgebungsvariablen gesetzt sind, 
die VsDevCmd.bat setzt.

Ich hatte jetzt 2 Ansätze ausprobiert:
1) in .bash_profile das bat-file starten

Ich denke, dass scheitert daran, dass ich das bat-file zwar starten 
kann, aber wenn cmd.exe dann zurück kehrt, die Umgebungsvariablen in der 
bash natürlich nicht mehr gesetzt sind. Wenn ich cmd.exe mit /K startet, 
dann habe ich zwar die Umgebung, bin aber auch nicht mehr in der bash.

2) ein bat-file schreiben, dass nacheinander VsDevCmd.bat und dann 
git-bash.exe aufruft.

Schreibe ich die beiden Kommandos mal so ganz naive hintereinander in 
eine bat-Datei, dann wir vcvars64.bat gestartet, nicht aber die shell:
1
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
2
"C:\Program Files\Git\git-bash.exe"

Hat jemand eine Idee, wie ich das Problem lösen kann?

mfg Torsten

von Peter II (Gast)


Lesenswert?

Torsten R. schrieb:
> Hat jemand eine Idee, wie ich das Problem lösen kann?

einfach den Inhalt der CMD in dein Shell script übernehmen. Es werde 
doch nur umgebungsvariabel gesetzt.

sonst mal schauen ob die mit source weiterkommst

https://en.wikipedia.org/wiki/Source_(command)

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Peter II schrieb:
> Torsten R. schrieb:
>> Hat jemand eine Idee, wie ich das Problem lösen kann?
>
> einfach den Inhalt der CMD in dein Shell script übernehmen. Es werde
> doch nur umgebungsvariabel gesetzt.
>
> sonst mal schauen ob die mit source weiterkommst
>
> https://en.wikipedia.org/wiki/Source_(command)

Das bat-file macht schon ein wenig mehr, als direkt die Variablen zu 
setzen und das ist auch der Grund, warum "source" die bat-Datei nicht 
als bash script interpretieren kann.

von Peter II (Gast)


Lesenswert?

Torsten R. schrieb:
> Das bat-file macht schon ein wenig mehr, als direkt die Variablen zu
> setzen

was soll es denn noch machen? Ich sehen nichts anderes.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Peter II schrieb:
> Torsten R. schrieb:
>> Das bat-file macht schon ein wenig mehr, als direkt die Variablen zu
>> setzen
>
> was soll es denn noch machen? Ich sehen nichts anderes.

Die Datei ist 219 Zeilen lang und neben dem Kommando "set" wird sehr 
häufig "if" verwendet und "@rem". Ich wollte die Datei jetzt nicht nach 
bash portieren und dass dann mit jedem Compiler-Update wiederholen.

von Peter II (Gast)


Lesenswert?

Torsten R. schrieb:
> Die Datei ist 219 Zeilen lang und neben dem Kommando "set" wird sehr
> häufig "if" verwendet und "@rem". Ich wollte die Datei jetzt nicht nach
> bash portieren und dass dann mit jedem Compiler-Update wiederholen.

dann musst du etwas kreativ sein. Rufe VsDevCmd.bat auf, schreibt alle 
umgungsvariablen in eine Datei und dann liest du die Datei mit Source 
ein.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Peter II schrieb:

> dann musst du etwas kreativ sein. Rufe VsDevCmd.bat auf, schreibt alle
> umgungsvariablen in eine Datei und dann liest du die Datei mit Source
> ein.

Das klingt mir sehr aufwändig. Wenn ich direkt
1
%comspec% /K "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"

ausführe und von da aus git-bash.exe starte, dann habe ich eine 
bash-shell, dass das Environment korrekt gesetzt hat. Das muss sich doch 
irgend wie "automatisieren" lassen.

: Bearbeitet durch User
von Heiko G. (heikog)


Lesenswert?

Torsten R. schrieb:
> Schreibe ich die beiden Kommandos mal so ganz naive hintereinander in
> eine bat-Datei, dann wir vcvars64.bat gestartet, nicht aber die shell:

Wenn du eine Batch-Datei aus einer anderen aufrufst kommt der 
befehlsinterpreter daraus nicht mehr zurück.

Versuch mal

call "C:\Program Files (x86)\Microsoft Visual 
Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
call "C:\Program Files\Git\git-bash.exe"

dann sollte git-bash auch ausgeführt werden.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Hallo Heiko,

Heiko G. schrieb:

> Versuch mal
>
> call "C:\Program Files (x86)\Microsoft Visual
> Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
> call "C:\Program Files\Git\git-bash.exe"
>
> dann sollte git-bash auch ausgeführt werden.

danke, dass funktioniert! Wunderbar :-)

mfg Torsten

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.