Makefile erstellen



  • Hallo,

    ich will kleinere Projekte selbst editieren und kompilieren, ohne IDE

    Mein Projekt.
    Name: rk3964
    Dateien: rk3964.c , t3964.c t3964.h

    Mein Makefile
    --------------------------------------------------------------
    rk3964: rk3964.o t3964.o
    <TAB> gcc rk3964.o t3964.o -lm -o rk3964

    t3964.o: t3964.c t3964.h
    <TAB> gcc -c t3964.c

    rk3964.o: rk964.c
    <TAB> gcc -c rk3964.c

    clean: rm -f *.o
    --------------------------------------------------------------

    Leider funktioniert das nicht. Warum auch immer 😃

    Danke
    worst_case



  • "funktioniert nicht" ist keine korrekte Fehlerbeschreibung :p wmfrs

    Vielleicht hilft dir ja die ultimative Makefile weiter.



  • Auf den ersten Blick würde ich sagen, die Zeile mit dem clean schaut nicht gut aus; die sollte eher so sein:

    clean:
            rm -f *.o
    

    Mehr Fehler ohne Fehlermeldung suchen, ist mir aber zu anstrengend. 😉



  • Da fehlt eine 3
    :p

    (im Ernst)



  • kingruedi schrieb:

    "funktioniert nicht" ist keine korrekte Fehlerbeschreibung :p <a target='_blank'href='http://tinyurl.com/ysokg'>Wie man Fragen richtig stellt</a>

    Vielleicht hilft dir ja die ultimative Makefile weiter.

    In diesem ultimativen Makefile kann man folgendes besser machen:

    %.dep: %.(EXT)(EXT) (CXX) $(CXXFLAGS) -MM $< -MT $@ -MT (<:.(<:.(EXT)=.o) -o $@

    Diese Zeile sagt, dass die .dep Datei auch abhängig ist von allem von dem die .o Datei abhängt. Wenn zum Beispiel aa.c++ von aa.h++ abhängt und man fügt dann in aa.h++ ein #include "bb.h++" ein, so wird aa.c++ neu kompiliert, aber die aa.dep nicht neu erzeugt. Wird dann bb.h++ verändert, so wird aa.c++ nicht neu kompiliert, was dann ein Fehler ist.



  • Bashar schrieb:

    Da fehlt eine 3
    :p

    (im Ernst)

    lol

    Manchmal wirst Du mir echt unheimlich. 🙂



  • Abend,
    sorry aber ich dachte ich hätte den Fehler beschrieben. (vielleicht waren die Gedanken schneller als die Tastatur und Hände)

    Ok, ich habe das ultimative makefile benutzt.
    Hier meine Dateien im Verzeichnis: main.c t3964.c t3964.h
    Targetname wäre rk3964
    hier bekomme ich folgende Fehlermeldung.

    make
    g++ -g -W -Wall -c main.c -o main.o
    main.c:17:53: t3964.h: Datei oder Verzeichnis nicht gefunden
    main.c:66: error: syntax error before =' token main.c: In functionint main(int, char**)':
    main.c: In function `int lesen_config(block**)':

    dies geht dann immer so weiter. Die Datei t3964.h liegt im selben Verzeichnis und hat auch die gleichen Rechte.
    Die Dateien müssen zusammenpassen da ich das Projekt auch mit Kdevelop kompilieren kann.

    Wer hat einen Tip.
    worst_case



  • Abend,

    ich habe den Fehler erkannt
    in der main.c lautete es

    #include <t3964.h>

    Ich habe hier nun den kompletten Pfad angegeben und jetzt funktioniert es.
    Warum es vorher mit Kdevelop gegangen ist...keine Ahnung.

    gibt es hier nicht eine Möglichkeit anzugeben das der Compiler erst einmal im selben Verzeichnis nach der "#include Datei" sucht ?

    Danke
    worst_case



  • worst_case schrieb:

    ich habe den Fehler erkannt
    in der main.c lautete es

    #include <t3964.h>

    gibt es hier nicht eine Möglichkeit anzugeben das der Compiler erst einmal im selben Verzeichnis nach der "#include Datei" sucht ?

    Klar, aber <t3964.h> ist ja auch falsch, wenn Du eine Datei aus dem gleichen Verzeichnis einbinden möchtest.
    Dann machst Du nämlich

    #include "t3964.h"
    


  • KDevelop hat wahrscheinlich ein "-I." oder "-I/pfad/zum/source/code" bei den CXXFLAGS hinzugefügt, die intern benutzt wurden.


Anmelden zum Antworten