Komischer Fehler bei Makefile
-
Hallo...
habe mich am [urlhttp://www.c-plusplus.net/forum/88418]ultimativen Makefile[/url] orientiert (bisher klappte das immer ganz gut)
Nun bekomme ich den Fehler:
../../src/oemconfigbasepanel.cpp:5: *** Mehrfache Target-Muster. Schluss.
das ist auch die einzige ausgabe von make.
Kurz ein wenig des Makefiles:
TARGETMODE := release TARGET_MODE := Release ifneq ($(MAKECMDGOALS), debug) TARGETMODE := debug TARGET_MODE := Debug endif TARGET := ./$(TARGETMODE)/program SRCPATH := ../../src/ CXXFLAGS := -g -Wextra -Wall -Wno-long-long -pedantic-errors -std=c++98 CXX := g++ LIBS := -l ../../extern/libfoo/lib/linux_x86/$(TARGETMODE)/libfoo.a \ -l ../../extern/libbar/lib/linux_x86/libbar.a \ ...usw -l ../../extern/wxwidget/lib/linux/release/lib/libwxbaseu-2.8.a \ -l ../../extern/wxwidget/lib/linux/release/lib/libwx_gtk2u_core-2.8.a \ -l ../../extern/wxwidget/lib/linux/release/lib/libwx_gtk2u_adv-2.8.a INCLUDES := -I ../../include/\ -I ../../extern/libfoo/include/\ -I ../../extern/libbar/include/\ ... weitere includes ... -I ../../extern/wxwidget/include/ EXT := cpp BUILDDIR := ./$(TARGETMODE)/ override BUILDDIR := $(strip $(BUILDDIR)) SOURCES := $(wildcard $(SRCPATH)*.$(EXT)) OBJECTS := $(patsubst %$(SRCPATH).$(EXT), $(BUILDDIR)/%.o, $(SOURCES)) DEPS := $(patsubst %$(SRCPATH).$(EXT), $(BUILDDIR)/%.dep, $(SOURCES)) .PHONY: all all: $(TARGET) $(TARGET): $(OBJECTS) $(DEPS) echo $(TARGET) $(OBJECTS) $(LIBS) $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) ifneq ($(MAKECMDGOALS), clean) -include $(DEPS) endif $(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag echo $< $@ $(CXX) $(CXXFLAGS) -c $< -o $@ $(INCLUDES) $(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag echo $< $@ mkdir -p $(dir $(@)) $(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.$(EXT)=.o) -o $@ $(INCLUDES) %.tag: mkdir -p $(dir $(@)) touch $@ .PHONY: clean clean: rm -rf $(BU
So, nun steh ich da wien Ox vorm Berg. Es kommt nur diese eine ausgabe, sonst nichts.
Wo Tabs sein sollten sind auch welche, afaik zumindest.Oh, und die cpp datei ist ganz normal, frage mich allerdings wie die an make gerät.
die sollte ja eigentlich an den compiler gehen. Und in der Zeile, das ist die erste zeile mit einem :.
-
Bin jetzt weiter:
das slash hinter src/ war zu viel, ohne geht es schon mal etwas weiter, jetzt kennt er das Target für die .cpp Dateien nicht -.-
-
Kann sein das
wildcard
da Probleme macht. Lass dir mal $(SOURCES) ausgeben. Aber wenn du eh nur ein src-Verzeichnis hast, dann pack die Makefile lieber in das Verzeichnis und im Hauptverzeichnis mach dann einfach eine Makefile, die die aufruft.so ungefähr sollte das gehen (meine Make-Skills sind ein wenig eingerostet)
SRCPATH := ../../src/ .PHONY: all clean all: $(MAKE) -C $(SRCPATH) clean: $(MAKE) -C $(SRCPATH) clean
Aber tu dir selbst einen gefallen und nimm lieber waf oder CMake (oä). Das ist komfortabler zu benutzen und du kannst dir gleich auch einen configure-Teil bauen lassen, der dir dann Bibliotheken etc. raussucht ().