Forum: Compiler & IDEs Makefile und Parameteraufruf


von Richard (Gast)


Lesenswert?

Hallo,

ich versuche gerade GNU make beizubringen, daß ich dem aufzurufenden
Compiler (nicht GCC) einen Parameter mitgeben möchte. Das ganze soll
dazu dienen, daß ich mit dem make-Aufruf ein goal/phony(?)
'aktiviere', daß mir den Parameter in einer Variablen setzt.

Dazu definiere ich:
-----------------------------------------
.PHONY : BUILD_EMULATOR
BUILD_EMULATOR:<tab>cx_opts += -dHWTYPE_EMULATOR CLEAN $(OUTFILE).s19
-----------------------------------------

eigentlich wäre das meine 'Wunschzeile', leider bricht make aber ab
mit:
make: *** No rule to make target `CX_OPTS', needed by
`BUILD_EMULATOR'.  Stop.

cx_opts wird als Parameter $(cx_opts) beim Aufruf des Compilers
verwendet - das sollte nicht das Problem sein.

Wie kann ich dem Compiler dieses 'define' mitgeben?

a propos: export cx_opts += -dHW... habe ich schon erfolglos probiert.

Welche wichtigen Angaben fehlen euch noch, um die Frage (zu verstehen
und) zu beantworten?

Gruß,
 Richard.

von Jörg Wunsch (Gast)


Lesenswert?

Die Funktionsweise von make ist inkompatibel mit Deinem Wunsch. ;-)

Wir hatten die Diskussion hier schon mal.  Das Grundproblem Deines
Ansinnens ist, daß make die Makros erst nach dem kompletten Durchlauf,
aber vor dem Start irgendeines Kommandos bewertet.  Damit funktioniert
es aber nicht, einen Makro an Stelle eines Kommandos zu setzen.

von Richard (Gast)


Lesenswert?

Mist, aber trotzdem danke für die schnelle Antwort. :)

Wie kann ich dem Compiler aber dennoch einen Parameter mitgeben?
Welche Vorgehensweise wird hierfür 'normalerweise' verwendet?

Gruß,
 Richard.

von Jörg Wunsch (Gast)


Lesenswert?

Dem Compiler kannst Du schon noch Parameter mitgeben, nur das Makefile
kannst Du nicht auf diese Weise `customizen'.

Du kannst z. B. unterschiedliche Targets im Makefile benutzen, um
unterschiedlich zu compilieren, also vielleicht einmal nur mit
${CFLAGS}, das andere Mal mit ${CFLAGS} und ${ADDITIONALCFLAGS}.
Allerdings mußt Du zwischendrin `make clean' machen.

von Richard (Gast)


Lesenswert?

Habe eine Lösung gefunden:

Parameter bzw. Variablenzuweisung kann direkt mit dem make-Aufruf
stattfinden:
make REBUILD CXOPTS='-dHWTYPE=EMULATOR'

wobei dann die Variable CXOPTS beim Aufruf des Compilers verwendet
wird:
cc $(CFLAGS) $(CXOPTS)

Wird 'make' nicht mit dem Parameter CXOPTS='...' aufgerufen, dann
bleibt auch die Umgebungsvariable CXOPTS leer bzw. auf diese Weise
lassen sich mehrere unterschiedliche Aufrufarten unterscheiden. ->
passt perfekt.


Jörg: Die unterschiedlichen 'targets' im Makefile heißen hier dann
wohl präziser 'goals' oder 'phony'(?). Das führte aber nicht zu
einer Lösung, wie ich mir das vorstellte. "Umgebungsvariable setzen in
der Aufrufzeile von make" war dann mein Stichwort. (GNU Make Doku Kap.
9.5).

Danke & Gruß,
 Richard.

von Jörg Wunsch (Gast)


Lesenswert?

`phony targets', ja, insofern paßt das für Dich.

Normalerweise ist ein target mit einer zu erzeugenden Datei verbunden.
Wenn das dazugehörige Kommando aber nie eine Datei diesen Namens
erzeugt (typisch: `make clean' wird keinesfalls eine Datei namens
`clean' erzeugen), dann ist das damit bezeichnete target stets
out-of-date, so daß es auf Anforderung immer gebaut wird.  Das ist
das, was das GNU make manual als `phony target' bezeichnet (die man
dort mit .PHONY auch speziell benennen kann).

Das goal ist das primäre target, das auf der Kommandozeile angegeben
wird.  Alle anderen, die dafür ausgeführt werden müssen, sind
abhängige targets davon.

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.