Korrektes Makefile



  • Hallo Leute,
    ich bin gerade dabei eine alte Klausuraufgabe zu überarbeiten und bin mir nicht sicher bei der lösung. Ich weiß z.B. nicht wie ich mit der Header Datei umgehen soll.

    Es gibt drei Dateien:
    util.c
    #include "klausur.h"
    int main(){
    int i;
    func(i);
    return 0;
    }

    klausur.c
    #include "klausur.h"
    void func(int i){
    }

    klausur.h
    void func(int i);

    Mein Lösung sieht so aus:
    CC = gcc
    CFLAGS = -Wall -c
    .PHONY: clean
    .PHONY: realclean

    main: main.o func.o
    $(CC) -o main main.o func.o

    main.o: main.c
    $(CC) $(CFLAGS) main.c

    func.o: func.c func.h
    $(CC) $(CFLAGS) func.c

    clean: rm *.o



  • - util.c oder func.c? entscheide dich
    - klausur.h oder func.h? entscheide dich
    - main.c scheint auch von func.h abhängig zu sein.
    - bei clean fehlt ein Zeilenumbruch

    Ansonsten sieht es korrekt aus.
    (Tipp: schliesse deinen Code in [code] und [/code] ein)



  • also so dann?

    CC = gcc
    CFLAGS = -Wall -c
    .PHONY: clean
    .PHONY: realclean
    
    util:   util.o klausur.o
            $(CC) -o util util.o klausur.o
    
    util.o: util.c klausur.h
            $(CC) $(CFLAGS) util.c
    
    klausur.o: klausur.c klausur.h
            $(CC) $(CFLAGS) klausur.c
    
    clean: 
            rm *.o
    


  • -c gehört niemals in die CFLAGS!

    CFLAGS := -Wall -Wextra -pedantic-errors -std=c99
    OBJS = main.o func.o
    
    main: $(OBJS)
    	$(CC) $(LIBS) $(OBJS) -o $@
    
    func.o: func.c func.h
    
    .PHONY: clean
    clean:
    	rm -f $(OBJS)
    

    du kannst dir übrigens auch die Abhängigkeiten generieren lassen. Schau dir einfach mal die Ultimative Makefile an.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ist mein überarbeitetes Makefile sonst korrekt?
    Mich interessiert, wo die Header-Datei überall stehen muss.



  • oaky schrieb:

    Ist mein überarbeitetes Makefile sonst korrekt?
    Mich interessiert, wo die Header-Datei überall stehen muss.

    Nein ist es nicht, du musst den Header überall dort als Abhängigkeit stehen wo er potentiell inkludiert wird, d.h. ein korrektes Makefile (ohne zu übertreiben) wäre:

    CFLAGS = -Wall -Wextra -pedantic-errors -std=c99
    OBJS = main.o func.o
    
    main: $(OBJS)
        $(CC) $(LIBS) $(OBJS) -o $@
    
    func.o: func.c func.h
    main.o: func.h
    
    .PHONY: clean
    clean:
        rm -f $(OBJS)
    

Anmelden zum Antworten