mikrocontroller.net

Forum: Compiler & IDEs Makefile und Parameteraufruf


Autor: Richard (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

Autor: Richard (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

Autor: Richard (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.