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.
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.
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.
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.
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.
`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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.