Forum: PC-Programmierung cmd.exe und bash


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.