Automake geeignet?

Hallo

Um die Programmiersprache C zu erlernen verwende ich gcc Version 4.2.1 auf
FreeBSD/i386. Nun möchte ich gerne ein Script machen, welches mir ein
Verzeichnis, eine C-Datei und ein Makefile generiert. Etwa so:

            $./tues –name'HalloWelt'

Das Resultat von dem Script wäre dann eben ein Verzeichnis mit dem
Namen HalloWelt, in diesem Verzeichnis
ist dann eine leere C-Datei mit dem Namen HalloWelt.c und eine Makefile mit
folgenden Inhalt:

all: link

link: compile
gcc –o HalloWelt HalloWelt.o

compile:
gcc –c HalloWelt.c

clean:
rm –f *.o HalloWelt

Würde sich automake für diese Aufgabe eignen? Oder geht das sogar mit make und dem entsprechenden
Parameter? Wenn ja, wie gehe ich das an? Wie übergebe ich z.B. einen Parameter
an automake/make und wie bringe ich den Inhalt ein Makefile?

Besten Dank für die Hilfe im Voraus.

Olli

Hallo!

im Prinzip hast du das Makefile doch schon fast da stehen. Es müßte wie folgt aus sehen, und (zwingend) den Dateinamen makefile haben, dann wird es von make automatisch gefunden.





HalloWelt: HalloWelt.o
    gcc –o HalloWelt HalloWelt.o

HalloWelt.o: HalloWelt.c
    gcc –c HalloWelt.c    

clean:
    rm -rf *.o HalloWelt

all: HalloWelt

(Wichtig: Die Einrückung muß ZWINGEND mit einem Tab erzeugt werden, nicht mit Leerzeichen. Viele Editoren fügen beim Druck auf Tab aber mehrere Leerzeichen ein, das läßt sich aber einstellen.)

Das liest sich wie folgt:

  • Um HalloWelt zu erzeugen, wird HalloWelt.o benötigt. Es wird dann der Befehl gcc -o ... ausgeführt.
  • Um HalloWelt.o zu erzeugen, wird HalloWelt.c benötigt, und dann der Befehl gcc -c ... ausgeführt.
  • Um clean zu… erreichen, wird nichts benötigt, und dann der Befehl rm -rf ... ausgeführt.
  • Um all zu erreichen, wird HalloWelt benötigt, aber kein Befehl ausgeführt

Nun reicht der Befehl make all oder make HalloWelt auf der Kommando-Zeile, um aus deiner c-Datei eine ausführbare Datei zu machen. Make erkennt dabei, daß deine Datei HalloWelt.c neuer ist als HalloWelt.o, und erstellt letztere dann neu. Und weil HalloWelt.o dann neuer ist als HalloWelt, wird auch der Linker nochmal aufgerufen. Der Vorteil daran ist, daß bei sehr vielen Dateien in einem Projekt nur die Sachen neu gemacht werden, bei denen es Änderungen gegeben hat. Ansonsten kannst du mit make clean alles löschen, und alles nochmal machen lassen.


Make ist ein sehr einfaches Werkzeug, auch wenn man noch vieles anderes damit machen kann. Automake arbeitet auf einem höheren Level, und ist dazu gemacht, größere Projekte, die aus vielen Dateien und Verzeichnissen bestehen, zu kompilieren. Denn das alles mit make zu machen, wäre ein großer Aufwand, und fehlerträchtig. ABER: automake erstellt selbst auch nur makefiles, und man ruft dann doch wieder nur make auf. Es ist in dem Fall gut, wenn man sich erstmal mit make und seinen makefiles auskennt.

Da du grade mit C anfängst, und deine Projekte noch nicht all zu groß werden, empfehle ich dir, erstmal nur make zu benutzen. Später kannst du immernoch automake benutzen, oder auch was moderneres wie cmake. Aber selbst cmake macht nur makefiles, und benutzt dann make.