PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Makefile Variable im Target überschreiben



Benngun
10-10-2011, 14:50
Hallo zusammen,

Ausgangslage:
Make File zur Kompilierung eines Programms mit in dateien Ausgelagerten Compileroptionen. Diese Oprionen werden am Anfang vom Makefile mittels include gesetzt.
Make: GNU Make 3.80

Aufgabe:
Durch anderen Make Aufruf das Programm mit anderen Kompilerschaltern kompilieren

Ansatz:
zuätzliches target "opt" bei dem die Variable mit den Kompilerschaltern überschrieben wird und dann aufruf von all.

Probleme:
Wenn ich Variablenzuweisung und Targetaufruf (all) zusammenpacke bekomme ich "make: all: Kommando nicht gefunden"

Wenn ich die Variablenzuweisung in ein eigenes Target (opt_var) packe und dann all aufrufe
opt: opt_var all

opt_var:
CFLAGS+=$(CFLAGS_OPT)

kommt die Variable nicht an

Hat jemand tips für mich wie ich Die Aufgabe noch bewältigen kann ?

Danek im Vorraus

undefined
11-10-2011, 06:33
Weil all ein (unique) Parameter ist der in jedem Makefile als Standard erwartet wird mußt du es so schreiben.




# -opt: opt_var all
all: opt_var

opt_var:
CFLAGS+=$(CFLAGS_OPT)



Alternative siehe die info Pages "/make/Phony Targets"

Benngun
17-10-2011, 09:10
hab mich leider eine Weile krankheitsbedingt nicht drum kümmern können, aber sehe das ich oben veleicht etwas zu wenig Infos geliefert habe. Ein "all" Target existiert und bei dem code handelt es sich nur um einen auszug.

Wobei das all target auch nur ein aufruf von weiteren targets ist.


all: generate library utility

bzw in den übergeordneten Verzeichnissen nach dem Muster aufgebaut ist


all:
cd lib; $(MAKE) all 2>&1 | tee Make.p >> ../Make.p
...


nach wie vor habe ich das Problem das die Ergänzug der Variable sich nicht so recht Targetabhängig einbinden lässt :confused:

Benngun
20-10-2011, 10:20
Geil nach Weiteren suchen bin ich doch noch im Netz fündig geworden :)
des Problems Lösung lautet target-specific variable value (http://www.gnu.org/software/make/manual/make.html#Target_002dspecific)

Anbei ein kleines Beispiel dazu

CFLAGS=-g
all:
CFLAGS=-O3
cc $(CFLAGS) -o test main.c

test: test2

test2: CFLAGS+=-O2
test2: all