Anzeige:
Ergebnis 1 bis 8 von 8

Thema: make ?

  1. #1
    wolfgang
    Gast

    Question make ?

    oh je!

    jetz habe ich so viele beispiele abgetippt und noch kein einziges make funktioniert bei mir

    was mache ich falsch?
    tut mir jemand den gefallen und schribit mir ein makefile als ersatz fuer meinen aufrufbeispiel "gcc -o test test.c" oder gar
    gcc -o test test.c libsonstwas.a" ???
    ich glaube den rest kriege ich dann schon hin

    danke schon mal

    gruss
    wolfgang :-)

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Post

    Hallo Wolfgang,

    der default-Fehler, dem die meisten make-Neulinge begegnen, ist die Syntax...

    Aber zunächst ein simples Beispiel:

    <pre>
    # Variablenvereinbarungen, z.B.
    CC=/usr/bin/gcc
    RM=/usr/bin/rm
    CFLAGS=-g
    LIBRARYPATH=/usr/local/lib

    # Jetzt ein "Target"
    # Aufbau: <Name> : <wovon abhängig>
    test: test.c
    $(CC) $(CFLAGS) test.c -o test.o \
    -L$(LIBRARYPATH) -lc

    # Auch ans Aufraümen denken
    clean:
    $(RM) test *.o
    </pre>

    Noch einige Hinweise
    <ul>[*] Der Name des Ziels sollte dem Dateinamen entsprechen; im Beispiel test. Damit ist make in der Lage, Abhängigkeiten zu ermitteln (Ist die Quelldatei neuer als die kompilierte Datei...?)
    </li>
    [*]Abhängigkeiten ist eine Liste von Dateien (Bibliotheken), von denen das Programm abhängt. In unserem Fall muss test neu generiert werden, falls test.c
    modifiziert wurde.
    </li>
    [*]
    Unterhalb der Zielzeile (Target) folgen die Anweisungen. Und hier ist wichtig, dass diese Zeile mit einem Tabulator beginnt (keine Leerzeichen!!!). Alles innerhalb <code>$(...)</code> wird substituiert; diese Variablen wurden am Anfang des Makefiles definiert. Normalerweise gehören alle Anweisungen auf eine Zeile, reicht dazu der Platz nicht aus, ist jede Zeile bis auf die letzte durch ein <code>\</code> abzuschließen (Vorsicht: danach dürfen keine Leerzeichen stehen!)
    </li>

    Soweit ein erster Überblick über Makefiles...

    Gruß, Thomas[/list]

  3. #3
    steven
    Gast

    Post

    hi thomas,
    auch ich dank dir
    steven

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Post

    Kleiner Nachtrag zur obigen Ausführung

    <ol>[*]Das Kommando rm befindet sich nach File System Standard im Verzeichnis /bin und nicht wie angegeben unter /usr/bin</li>
    [*]Und zu den Bibliotheken... eine Bibliothek hat üblicher Weise den Namen <code>libname.a</code>. Dem Compiler wird sie aber in der Form <code>-lname</code> mitgeteilt. D.h. im obigen Beispiel ist die Bibliothek [b]libc.a</code> gemeint (und diese muss niemals explizit angegeben werden; der Compiler sollte sie immer finden)
    </li>[/list=a]

    Thomas

  5. #5
    wolfgang
    Gast

    Thumbs up

    ECHT SUPER!

    das klappt ja auf anhib und ist sehr komfortabel,
    nun passiert bei mir aber folgendes:
    die ausfuerbare datei hat die endung .o nun habe ich (ja nicht gaz doof) das .o aus dem beispiel weg gemacht und vor den clean ein # gestellt (soll ja nicht geloescht werden), aber ob ich da nun ein clean drin habe oder nicht spielt gar keine rolle !?

    na ja das make funzt soweit sogut und vieleicht helfen diese SUPERTIPS auch anderen

    ich jedenfalls bin gluecklich, nochmals danke an euch thommy und Christoph

    gruss
    wolfgang :-)

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677

    Post

    Noch ein Problem, über das jeder Neuling stolpert:

    Das Executable "test" wird sich nicht starten lassen aus folgendem Grund:

    Die Shell hat ein eingebautes Kommando "test", das immer statt des Executables "test ausgeführt wird! Da nutzt es nichts, "." in den Suchpfad aufzunehmer, chmod +x einzugeben und was der verzweifelte Newbie noch alles probieren mag....

    Also: das erste C-Programm niemals "test nennen...

  7. #7
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Post

    Also weiter im Makefile/make-Anfänger-Kurs...

    Wird make ohne Argumente aufgerufen, sucht es im aktuellen Verzeichnis nach einer Steuerdatei mit dem Namen makefile. Wird dieses nicht gefunden, sucht make nach Makefile. Wird auch dieses nicht gefunden, hagelt's die Meldung
    no rule to make target. Kommt Dir sicher bekannt vor, oder

    Angenommen, make findet eine solche Steuerdatei... dann sucht es in dieser Datei nach dem ersten Target (Ziel), also einer Zeile &li;zielname&gt; : &lt;Abhängigkeiten&gt; und führt alle Schritte bis zum nächsten Ziel aus!!!

    Da clean im Beispiel das zweite Target ist, wird es nicht ausgeführt, es sei denn: make wird mitgeteilt, dass es genau dieses Target abarbeiten soll:

    Also make clean und schon klappts auch mit dem Saubermachen

    Thomas

    PS: zum .o. Da habe ich einen kleinen Fehler gemacht... in der betreffenden Zeile $(CC) $(CFLAGS) test.c -o test.o \ gibt die Option -o &lt;name&gt; an, dass der Compiler die Ausgabe in die Datei name umlenken soll (sonst heißt das Binary a.out). Der Name sollte also nicht test.o lauten, sondern test (Achtung: Vergleiche Bemerkung von Christoph)


  8. #8
    wolfgang
    Gast

    Post

    eure tips sind besser als 100 buecher!

    DANKE

    (heute habe ich endlich auch mal ein paar antworten zu anderen themen gewuss und langsam machen meine LINUXKISTEN spass)

    gruss
    wolfgang :-)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •