Archiv verlassen und diese Seite im Standarddesign anzeigen : Make Scripting, kleine Hausarbeit
Hallo,
ich moechte, wegen kleinerer Programmierexperiemene, ein Makefile haben das mir folgende Struktur mit gcc zur ausfuehrbaren Datei baut.
globals.h
main.c
applet.c
menu/FileLoad.c
menu/FileSave.c
tree/ViewRowClicked.c
tree/ViewRowEdited.c
...
Ihr seht ich mach da was mit GUI und Callbacks, aber die Struktur sollte ziemlich Mainstream Form sein.
Vielleicht weiss jemand ein Makefile im Netz wo ich etwas vom Profil mitnehmen kann.
THX
ich moechte, wegen kleinerer Programmierexperiemene, ein Makefile haben...
Vielleicht weiss jemand ein Makefile im Netz wo ich etwas vom Profil mitnehmen kann.
Schau dir mal http://www.ijon.de/comp/tutorials/makefile.html an.
...hab es mal so in etwa:
ALLSOURCES = $(shell find -type f -name \*c)
WITHOUTMAIN = $(ALLSOURCES:./main.c=)
SOURCES = $(WITHOUTMAIN:./applet.c=)
ALLHEADERS = $(shell find -type f -name \*h)
WITHOUTGLOB = $(ALLHEADERS:./globe.h=)
OBJECTS = $(SOURCES:.c=.o)
main: globe.h main.c applet.c $(HEADERS) $(OBJECTS) applet
gcc main.c -g -o sPillz `pkg-config --cflags --libs gtk+-2.0` .object/*o
applet: globe.h applet.c $(SOURCES)
gcc applet.c -g -c -o .object/applet.o `pkg-config --cflags --libs gtk+-2.0`
$(OBJECTS): $($@:.o=.c)
@if ! test -f `dirname $@`/globe.h; \
then ln -s `pwd`/globe.h `dirname $@`/globe.h; \
fi; \
if ! test -f `dirname $@`/pros.h; \
then ln -s `pwd`/pros.h `dirname $@`/pros.h; \
fi; \
echo gcc -c -o .object/`basename $@` $(subst .o,.c,$@) `pkg-config --cflags --libs gtk+-2.0`; \
gcc -c -o .object/`basename $@` $(subst .o,.c,$@) `pkg-config --cflags --libs gtk+-2.0`Alles nicht so schwer wenn das Atom reagiert...
SOURCES = 1.c 2.c 3.c
OBJECTS = $(SOURCES:.c=.o)
main: $(OBJECTS)
echo All done.
$(OBJECTS): $($@:.o=.c)
gcc -o $@ $<...ok, noch ein Problem: $< wird nicht aufgeloest.
Brauch den Testcode um ein anderes Problem anzugehen.
Danke.
SOURCES = 1.c 2.c 3.c
OBJECTS = $(SOURCES:.c=.o)
main: $(OBJECTS)
echo All done.
$(OBJECTS): $($@:.o=.c)
gcc -o $@ $<...ok, noch ein Problem: $< wird nicht aufgeloest.
Brauch den Testcode um ein anderes Problem anzugehen.
Danke.
Was möchtest du mit $@ $< erreichen?
Was möchtest du mit $@ $< erreichen?
...na, ich hab eine Liste in OBJECTS die als Abhaengigkeiten im target 'main' gefuehrt werden, sollten?
Da nun, sollte eine der Dateien 1.o 2.o 3.o neuer sein als das target main, ist keine Datei und damit immer aelter, taete make, meiner Terminologie nach, pruefen ob z. B. 1.o aelter ist als 1.c, weil $(@:.o=.c) die Abhaengigkeit zu 1.o 1.c setzt, und dann die Zeile 'gcc -o $@ $<' zu 'gcc -o 1.o 1.c' aufloest, da $@ das Target, und $< die erste Abhaengigkeit symbolisieren sollte.
Da wird man bloed...hab nur Probleme mit make; wenn es nicht so praktisch waere.
Nach dem ich gelesen hatte was du machen möchtest habe ich mich jetzt auch wieder etwas mit make beschäftigt. Was ich bis jetzt gesehen habe musst du deine Abhängigkeiten besser abgrenzen ansonsten ist deine Anweisung ok.
Bsp.:
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
(das ist aus der gnu make Referenz)
Nach deinem Makefile sind alle .o von allen .c abhängig und deswegen wird alles immer neu gebaut.
Wenn das nicht richtig ist klärt mich bitte jemand auf.
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.