M
Hallo c-community,
heute mal eine allgemeine Frage zu kompilieren mit make. Also ich habe folgende makefile geschrieben:
VERSION = 0.0.2
CC = gcc
CFLAGS = -ggdb -Wall -DVERSION=\"$(VERSION)\"
LDFLAGS = -lpthread
ODIR = obj
HELP_SDIR = ../LibHelp/src
HELP_IDIR = ../LibHelp/header
HELP__DEPS = conio.h errmsg.h clear.h
HELP_DEPS = $(patsubst %,$(HELP_IDIR)/%,$(HELP__DEPS))
HELP__OBJ = conio.o errmsg.o clear.o
HELP_OBJ = $(patsubst %,$(ODIR)/%,$(HELP__OBJ))
$(ODIR)/%.o: $(HELP_SDIR)/%.c $(HELP_DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
CLASSES_SDIR = ../Classes/src
CLASSES_IDIR = ../Classes/header
CLASSES__DEPS = CLASS_Socket.h CLASS_Client.h CLASS_Object.h
CLASSES_DEPS = $(patsubst %,$(CLASSES_IDIR)/%,$(CLASSES__DEPS))
CLASSES__OBJ = CLASS_Socket.o CLASS_Client.o CLASS_Object.o CLASSES_OBJ = $(patsubst %,$(ODIR)/%,$(CLASSES__OBJ))
$(ODIR)/%.o: $(CLASSES_SDIR)/%.c $(CLASSES_DEPS)
$(CC) -o $@ -c $< $(CFLAGS)
COM_SDIR = src
COM_IDIR = header
COM__DEPS = main.h PrimerAndSubClient.h
COM_DEPS = $(patsubst %,$(COM_IDIR)/%,$(COM__DEPS))
COM__OBJ = main.o PrimerAndSubClient.o
COM_OBJ = $(patsubst %,$(ODIR)/%,$(COM__OBJ))
$(ODIR)/%.o: $(COM_SDIR)/%.c $(COM_DEPS)
$(CC) -o $@ -c $< $(CFLAGS)
clientCommunication: $(HELP_OBJ) $(CLASSES_OBJ) $(COM_OBJ)
gcc -o $@ $+ $(CFLAGS) $(LDFLAGS)
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
Vorher lagen die .h- und .c-Dateien der Classes in verschiedenen Ordnern und wurden in der neuen Version in einen gemeinsamen Ordner einsortiert.
Wenn ich jetzt aber compilieren will, sehe ich, dass die Klassen-Dateien gar nicht mehr compiliert werden. Leider finde ich gerade (seit 2-3h) keinen wirklichen Fehler und bitte euch mir hierbei zu helfen.
Warum werden die CLASSES_OBJ nicht mehr erzeugt. Mehrfaches "make clean" gefolgt von "make" führen immer zur Fehlermeldung, dass die Funktionen aus den Klassen im clientCommunication-Programm nicht referenziert sind (undefined reference)
Vielen Dank
mirrowwinger
[EDIT1]Also wenn ich die Kompilieranweisung für das Programm wie folgt abändere:
clientCommunication: $(HELP_OBJ) $(CLASSES_OBJ) $(COM_OBJ)
gcc -o $@ $+ $(CFLAGS) $(LDFLAGS) ../Classes/src/CLASS_Client.c
wird die erste (von mehreren Klassen) anscheinend richtig verwendet. Ich dachte aber bisher die Verwendung der Object-Dateien (o-Dateien) würde genau dies unnötig machen und bei den Funktionen der LibHelp (1. Block) funktioniert dies auch genau so.
Bin ziemlich verwirrt, warum anscheinend die Reihenfolge für die Erstellung dieser o-Dateien hier nicht hinhaut und warum die Classen nicht kompilieren.[/EDIT1]