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 ().


Anmelden zum Antworten