Makefile und Parameteraufruf

Gast #100042
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.
Gast
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.
Gast
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.
Gast
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.
Gast
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.
Gast
`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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.