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: realcleanmain: main.o func.o
$(CC) -o main main.o func.omain.o: main.c
$(CC) $(CFLAGS) main.cfunc.o: func.c func.h
$(CC) $(CFLAGS) func.cclean: 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 ZeilenumbruchAnsonsten 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)