Forum: Compiler & IDEs Makefile, bedingte Zuweisung einer Variablen?


von Marc (Gast)


Lesenswert?

Erstmal ein kraeftiges Hallo an alle, denn ich bin neu hier.  Das Forum 
macht einen tollen Eindruck, Glueckwunsch!

Und dann habe ich auch gleich eine Frage, die bei mir schon eine Weile 
ungeloest wartet - trotz Google :-)

Ich moechte in einem GNU makefile den Pfad meiner Toolchain zuweisen. 
Das makefile wird aber mal auf einem spanischen Windows (mit cygwin) 
ausgefuehrt, und dann wieder auf einem englischen.  Dank Bill Gates und 
seinen tollen Einfaellen ist der Pfad dann entweder:

  c:/Program files/GNUARM

oder

  c:/Archivos de programa/GNUARM

Jetzt brauche ich also eine bedingte Zuweisung, ala "if/then/else", 
kombiniert mit etwas wie einer "file exists" Funktion.  Leider konnte 
ich da in der Hilfe von make nichts passendes finden (ich benutze GNU 
make 3.79.1).

Alternativ habe ich dann versucht, die Pfad-Variable heranzuziehen, in 
der ja ebenfalls Hinweise auf die Sprachversion zu finden sein sollten. 
Auch das hat nicht funktioniert.  Da ich hier noch den code Schnipsel 
vorliegen habe, zitiere ich ihn mal kurz:

  ifeq ("rchivos de programa",$(findstring "rchivos de 
programa",$(PATH)))
    ARM_PATH =      c:/Archivos de programa/GNUARM
  else
    ARM_PATH =      c:/Program files/GNUARM
  endif

Wie gesagt, das hat ebenfalls nicht funktioniert.

Kann mir einer von Euch verraten, wie ich das Problem loesen kann?

Danke an alle die sich den Kopf zerbrechen..
Marc

von Jojo S. (Gast)


Lesenswert?

ist die Environment Variable 'ProgramFiles' nicht auf beiden vorhanden? 
Normalerweise ist die in XP drin und zeigt auf den richtigen Pfad.
Das andere Beispiel: man muss nur mit den Leerzeichen im Namen 
aufpassen, da müssen vermutlich noch Anführungszeichen drumherum.

von Marc (Gast)


Lesenswert?

Hallo Jojos,

Leider gibt es diese Variable nicht, oder sie schafft es nicht in die 
cygwin bash Ebene hinein.

Deine Antwort hat mir aber trotzdem weitergeholfen, denn ich habe es 
nochmal ausfuehrlich ausprobiert.

Hier ist die Loesung, die funktioniert (glaube ich, denn ich sitze 
gerade nur am englischen Windows):

  ifeq ($(findstring rchivos de,$(PATH)),)
    ARM_PATH =      c:/Program files/GNUARM
  else
    ARM_PATH =      c:/Archivos de programa/GNUARM
  endif

Das Problem lag in der Syntax von ifeq und findstring.

Danke!!

von holger (Gast)


Lesenswert?

Was spricht denn dagegen auf beiden Rechnern z.B.
einfach C:/GNUARM bei der Installation zu verwenden ?
Dann könntest du dir solche Klimmzüge sparen.

von Marc (Gast)


Lesenswert?

> Was spricht denn dagegen auf beiden Rechnern z.B.
> einfach C:/GNUARM bei der Installation zu verwenden ?

Hallo Holger,

In diesem Fall spricht dagegen, dass die Toolchain bereits vor Beginn 
des Projekts installiert war.  Ich wuerde ungerne die Installation 
zweier einwandfrei funktionierender Arbeitsplaetze verhuntzen, nur weil 
dadurch ein Makefile simpler wird.

Danke trotzdem fuer den Hinweis!

von Heiko_S (Gast)


Lesenswert?

Hi,
es gibt doch die Variable %ProgramFiles%, die für soetwas genommen 
werden könnte, nicht oder?

von FBI (Gast)


Lesenswert?

Hi,

%ProgramFiles% gibts nur im "Command Prompt" von Windows. Unter 
Cygwin/bash gehts dann mit ${PROGRAMFILES} (alles groß!).

CU

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.