Forum: PC Hard- und Software MSP430 GCC #define und Makefile.


von Roy .. (royw)


Lesenswert?

Hi,

in meinem Sourcecode kann ich mittels verschiedener #define's 
verschiedene Firmware erzeugen.

Zur Zeit setze ich das entsprechende #define und übersetze alles und 
bekomme dann das fertige .A43 File.
Dieses benenne ich dann um und mach das gleiche mit den anderen 
#define's .

Gibt es eine Möglichkeit den Ausgabenamen (MSPGCC) in Abhängigkeit des 
gerade verwendeten #define zu ändern ?

Danke für eure Hilfe

: Verschoben durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Max ........ schrieb:
> Gibt es eine Möglichkeit den Ausgabenamen (MSPGCC) in Abhängigkeit des
> gerade verwendeten #define zu ändern ?

Der Ausgabename wird ausschließlich auf der Kommandozeile des
Compilers festgelegt (mit der Option -o).  Du musst also denjenigen
bitten, der den Compiler aufruft, dass er einen zum #define-Wert
passenden Namen wählt.

Falls derjenige das Programm “make” sein sollte, kann man sowas
natürlich dadurch erreichen, dass man gleichlautend zum Namen, der bei
-o benutzt wird, beim Compilieren das entsprechende #define auf der
Kommandozeile mittels -DMACRO=wert erzeugt.

von Roy .. (royw)


Lesenswert?

Hi,

ja ich rufe "MAKE.EXE" auf.

Das makefile befindet sich in meinem Quellcode Ordner und ich rufe es so 
auf :

make.exe --directory="C:\..."

Ich arbeite nicht von der Kommandozeile aus, sondern aus dem "MED CX", 
also einem Editor.

Ich bräuchte jetzt eine Möglichkeit z.B. eine Umgebungsvariable zu 
setzen, die dann vom Makefile wieder als Dateinamen benutzt wird oder 
sows in der Art ...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich schieb' das mal nach "PC Hard- und Software", denn das Problem
betrifft ja offensichtlich die von dir genutzte Entwicklungsumgebung.

make selbst hat kein Problem, Environmentvariablen zu verarbeiten.
Sie werden standardmäßig als make-Variable übernommen:
1
$ touch foo.c
2
$ env CC=foobarmumble make foo.o
3
foobarmumble    -c -o foo.o foo.c
4
make: foobarmumble: Command not found
5
make: *** [foo.o] Error 127

von Roy .. (royw)


Lesenswert?

oder kann man im MAKEFILE auch #defines festlegen, die man dann in den 
einzelnen Sourcefiles wieder mit #ifdef usw. auswerten kann ?

Dann könnte ich meine #defines einfach ins MAKEFILE schieben ...
Müsste dann aber natürlich den Ausgabefilename auch im Makefile anpassen 
können (in Abhängigkeit vom #define)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Max ........ schrieb:
> oder kann man im MAKEFILE auch #defines festlegen, die man dann in den
> einzelnen Sourcefiles wieder mit #ifdef usw. auswerten kann ?

Ja.  Ich schrieb doch, dass du einen Präprozessormakro (das ist das,
was ein #define erzeugt) auch auf der Kommandozeile erzeugen kannst
mittels -D.

Das wiederum funktioniert auch aus einem Makefile.

Beispiel:
1
PROJECT_CONFIG=something
2
3
CFLAGS += -DPROJECT_CONFIG=$(PROJECT_CONFIG)
4
5
all: project-$(PROJECT_CONFIG).elf
6
7
project-$(PROJECT_CONFIG).elf: $(OBJECTS)
8
        $(CC) $(LDFLAGS) -o project-$(PROJECT_CONFIG).elf $(OBJECTS)

Erzeugt wird beim Aufruf von "make all" eine Datei namens
project-something.elf, und beim Compilieren wird ein Makro
PROJECT_CONFIG mitgegeben, der den Wert "something" besitzt, also
so, als ob du in einer C- oder Headerdatei stehen hättest:
1
#define PROJECT_CONFIG something

von Roy .. (royw)


Lesenswert?

Danke Jörg !

ich hatte das oben nicht richtig verstanden. Habe es aber 
zwischenzeitlich hinbekommen.

Vielen Dank nochmal !

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.