Makefile mit src/ und include/ Ordner



  • Hallo ich hoffe ich bin hier im richtig.

    Ich möchte mit einer Makefile mein C++ Projekt erstellen:

    CXX := g++
    INCDIR   := ../include
    CPPFLAGS := -g -std=c++0x -I$(INCDIR)
    LGFLAGS  := -g -std=c++0x -lsfml-system -lsfml-window -lsfml-graphics -lGL -lGLU -lGLEW
    EXE		 := exec
    
    MAINFILES := src/main.cpp include/gamestate.h
    MAINOFILE := main.o
    
    CPPFILES := src/gameengine.cpp src/introstate.cpp src/menustate.cpp src/playstate.cpp 
    HPPFILES := include/gameengine.h include/introstate.h include/menustate.h include/playstate.h
    OFILES	 := src/gameengine.o src/introstate.o src/menustate.o src/playstate.o 
    
    $(EXE): $(MAINOFILE) $(OFILES)
    	$(CXX) -o $(EXE) $(MAINOFILE) $(OFILES) $(LGFLAGS)
    
    $(MAINOFILE): $(MAINFILES)
    	$(CXX) -c $(MAINFILES) $(CPPFLAGS)
    
    $(OFILES): $(HPPFILES) $(CPPFILES)
    	$(CXX) -c $(HPPFILES) $(CPPFILES) $(CPPFLAGS)
    

    Leider finden meine cpp Dateien die Includes nicht. Durch googlen habe ich ein Turorial gefunden das besagt man muss es so machen:

    INCDIR   := ../include
    CPPFLAGS := -g -std=c++0x -I$(INCDIR)
    

    Klappt aber nicht, wie bekomme ich das zum laufen ?



  • Du musst dich ma entscheiden ../include oder ./include. Wo liegt den dein Makefile?
    Als du das angefangen hast zu schreiben wohl noch im src/ Ordner, später musst du das wohl ma geändert haben 🙂



  • Nein ich schreibe so etwas zum ersten mal. So sieht es im Hauptornder aus:

    makefile
    src
    include



  • ok, dann schau dir ma dein INCDIR an, das verweisst doch auf ../include und nicht auf ./include



  • Danke. Ich verstehe aber nicht warum hier nur 1 Punkt geschrieben wird.



  • Noch ein Tipp, damit du nicht immer die Pfade vor deinen Sources und Objekte schreiben musst.

    Hier mal ein altes Makefile für einer meiner alten C-Projekte:

    # Makefile
    # Compiler: gcc 4.6.1
    # written by Lichtweite 2011, Germany
    #======================================================================
    FINAL = construct.bin
    
    OBJ_DIR = obj
    vpath %.c src/common
    vpath %.c src/opengl
    vpath %.c src/gfx
    vpath %.c src
    
    # GLFW
    # =====================================================================
    INC_GLFW = -Ilibs/GLFW/include
    LIB_GLFW = libs/GLFW/libs/linux/x64/libglfw.a
    
    # GLEW
    # =====================================================================
    INC_GLEW = -Ilibs/glew/include
    LIB_GLEW = libs/glew/libs/linux/x64/libGLEW.a
    CFLAGS_GLEW = -DGLEW_STATIC
    
    CC      = gcc
    INCLUDE = $(INC_GLFW) $(INC_GLEW)
    CFLAGS  = $(INCLUDE) $(CFLAGS_GLEW) -Wall -O2
    
    LIB    = $(LIB_GLEW) $(LIB_GLFW) 
    LFLAGS = $(LIB) -lGLU -lGL 
    
    MODE = 
    
    _OBJ = main.o error.o log.o file.o window.o program.o shader.o buffer.o load_tga.o
    OBJ = $(patsubst %,$(OBJ_DIR)/%,$(_OBJ))
    
    ECHO_LINE = -------------------------------------------------------
    
    all: prepare $(FINAL)
    
    $(FINAL): $(OBJ)
    	@echo linking...$(OBJ)
    	@$(CC) $^ -o $@ $(LFLAGS) $(MODE)
    	@echo $(ECHO_LINE)
    	@echo ready
    
    $(OBJ_DIR)/%.o: %.c
    	@echo compiling...$@
    	@$(CC) -c -o $@ $< $(CFLAGS)
    	@echo $(ECHO_LINE)
    
    prepare:
    	@echo =======================================================
    	@echo  BUILDING $(FINAL) written by Lichtweite
    	@echo =======================================================
    
    .PHONY: clean
    
    clean:
    	@echo cleanup...
    	@rm $(OBJ_DIR)/*.o
    	@echo $(ECHO_LINE)
    	@echo ready
    




  • Tolles Makefile Rüdiger, ich wusste es gibt an meinem noch was zu verbessern 😃


Anmelden zum Antworten