Problem mit der ultimativen Makefile



  • Wenn ich versuche folgendes Programm:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	cout<<"Hallo Welt"<<endl;
    	system("pause");
    };
    

    mit folgender (der ultimativen) Makefile:

    TARGET   := ./program
    CXXFLAGS := -g -W -Wall -Wno-long-long -pedantic -std=c++98
    CXX      := g++
    LIBS     := 
    EXT      := cpp
    BUILDDIR := build 
    
    override BUILDDIR := $(strip $(BUILDDIR))
    SOURCES  := $(wildcard *.$(EXT))
    OBJECTS  := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES))
    DEPS     := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES)) 
    
    .PHONY: all
    all: $(TARGET) 
    
    $(TARGET): $(OBJECTS) $(DEPS)
    	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) 
    
    ifneq ($(MAKECMDGOALS), clean)
    -include $(DEPS)
    endif 
    
    $(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag 
    	$(CXX) $(CXXFLAGS) -c $< -o $@ 
    
    $(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag 
    	$(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.$(EXT)=.o) -o $@ 
    
    %.tag:
    	mkdir -p $(dir $(@))
    	touch $@ 
    
    .PHONY: clean 
    clean:
    	rm -rf $(BUILDDIR)
    

    zu kompilieren bekomme ich folgenden Fehler:

    C:\Dokumente und Einstellungen\meinname\Desktop>mingw32-make
    mkdir -p build/
    Syntaxfehler.
    mingw32-make: *** No rule to make target `build/main.dep', needed by `build/main
    .o'.  Stop.
    

    Könnte mir BITTE jemand erklären was ich falsch mache?



  • kann mir denn niemand weiterhelfen 😞 ? Ich benutze mingw 5.3.1



  • LOL.

    Die marginale Aussage: "Syntaxfehler." wird bei mir im gleichen Hirnlappen verarbeitet wie: "Speicherzugriffsfehler." Beide mit Punkt am Ende. Das wars.

    Soviel sei verraten: das sind beide betriebssystem-nahe Meldungen. Deine Meldung kommt von cmd.exe, weil es die Anweisung "mkdir -p build/" infolge des falschen Pfadseparators nicht versteht. Weg mit ihm!



  • was ist ein Pfadseperator?



  • Der Slash. (Sorry, hat ein bißchen gedauert)


Anmelden zum Antworten