Linker / Compiler Problem
-
das hatte ich schon gedacht.
-
ich sehe es ein: es ist ein häßlicher makefilefehler und hat nichts mit dem linker zu tun.
da es sich nicht nur um eine datei objekt1.cpp handelt, sondern um ca. 50, kann mir jemand erklären, wie ich das mit der suffix-regel(%.cpp) hinbekomme?
-
-
wie schaffe ich es, dass das makefile auch dateien aus einem unterverzeichnis compilieret und am ende auch linkt. die .o dateinen sollten dann bitte auch im verzeichnis angelegt werden, di quelldateien sind?
-
du musst bei der Makefile aus der FAQ ja nur die wildcard erweitern um das Unterverzeichniss
-
Hier eine verbesserte Version, da funktioniert das auch mit den obj-Dateien in Unterverzeichnissen:
TARGET :=./programm CXXFLAGS :=-g -W -Wall CXX :=g++ LIBS := SOURCES :=$(wildcard *.cc) OBJECTS :=$(patsubst %.cc,%.o,$(SOURCES)) DEPS :=$(patsubst %.cc,%.dep,$(SOURCES)) all: $(TARGET) run: $(TARGET) $(TARGET) $(TARGET): $(OBJECTS) $(DEPS) $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) -include $(DEPS) %.o: %.cc $(CXX) $(CXXFLAGS) -c $< -o $@ %.dep: %.cc $(CXX) $(CXXFLAGS) -MM $< -MT $(<:.cc=.o) > $@ .PHONY: clean clean: rm -f $(TARGET) $(OBJECTS) $(DEPS)
-
wenn ich das Makefile wie fogt mache:
TARGET := test
CXXFLAGS :=-Wall -I./include
CXX :=g++
LIBS :=
SOURCES :=(patsubst %.cpp, %.o, (patsubst %.cpp, %.dep, $(SOURCES))all: $(TARGET)
$(TARGET): $(OBJECTS) (CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)
-include $(DEPS)
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o @ %.dep: %.cpp (CXX) $(CXXFLAGS) -MM $< -MT $(<:.cpp=.o) > $@.PHONY: clean
clean:
rm -f $(TARGET) $(OBJECTS) $(DEPS)bekomme ich folgenden fehler vom linker:
/usr/lib/crt1.o: In function_start': /usr/lib/crt1.o(.text+0x18): undefined reference to
main'
collect2: ld returned 1 exit status
make: *** [test] Fehler 1
was ist denn da falsch gelaufen?
was bewirkt $<, $(<:.cpp=.o) >, -MM und -MT?
-
deine sources-Zeile ist falsch, sollte so aussehen:
SOURCES :=$(wildcard *.cpp include/*.cpp)
-
da stand ein kommentar hinter, den ich für den eintrag ins forum gelöscht habe. dabei ist die klammer flöten gegangen. im makefile ist sie natürlich drin.
-
ja, aber schaus dir nochmal genau an. Du hast ein 'wildcard' zuviel.
-
das war es.
-
das war es.
-
uh, das erinnert mich daran, dass ich die Makefile in der FAQ updaten wollte
:xmas2: