lmariscal

makefile

Dec 15th, 2016
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 2.61 KB | None | 0 0
  1. # ===========================
  2. # Project:                  #
  3. # Author:                   #
  4. # ===========================
  5.  
  6. # Compiler and User Settings
  7. CC      := g++
  8. CFLAGS  := -c -Wall
  9. LDFLAGS :=
  10. _LIBS := #None
  11.  
  12. # Directories
  13. SRC_DIR := src
  14. OBJ_DIR := obj
  15. INC_DIR := include
  16. LIB_DIR := lib
  17. DLL_DIR := dll
  18. BIN_DIR := bin
  19.  
  20. SOURCES := $(wildcard $(SRC_DIR)/*.cpp)
  21. OBJECTS := $(patsubst $(SRC_DIR)/%,$(OBJ_DIR)/%,$(SOURCES:.cpp=.o))
  22.  
  23. BIN_EXE := $(BIN_DIR)/foo
  24.  
  25. LIBS  := -L$(LIB_DIR) $(_LIBS)
  26.  
  27. INCLUDE_DIRS := $(INC_DIR:%=-I%)
  28.  
  29. all: header-banner $(SRC_DIR) default
  30.     $(info )
  31.     $(info --------- Done [all] ------------------------------)
  32.     $(info )
  33.  
  34. default: prebuild build postbuild
  35.  
  36. prebuild:
  37.  
  38. build-compile: compile-banner $(OBJECTS)
  39. build-link: link-banner $(BIN_EXE)
  40. build: build-compile build-link
  41.  
  42. postbuild:
  43.  
  44. $(BIN_EXE): $(OBJECTS)
  45.     $(foreach O,$(OBJECTS),$(info [OBJ] ${O}))
  46.     @$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@
  47.     $(info [EXE] $@)
  48.  
  49. $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
  50.     $(info [SRC] $<)
  51.     @$(CC) $(CFLAGS) $(INCLUDE_DIRS) -o $@ -c $<
  52.  
  53. $(SRC_DIR):
  54.     @mkdir $(SRC_DIR)
  55.     @mkdir $(OBJ_DIR)
  56.     @mkdir $(INC_DIR)
  57.     @mkdir $(LIB_DIR)
  58.     @mkdir $(DLL_DIR)
  59.     @mkdir $(BIN_DIR)
  60.  
  61. .PHONY: header-banner
  62. header-banner:
  63.     $(info )
  64.     $(info ===============================================)
  65.     $(info #   _____                      _      __   __ #)
  66.     $(info #  / ____|                    {_}     \ \ / / #)
  67.     $(info # | |     __ ___   ____ _ _ __ _ _   _ \ V /  #)
  68.     $(info # | |    / _` \ \ / / _` | `__| | | | | > <   #)
  69.     $(info # | |___| {_| |\ V / {_| | |  | | |_| |/ . \  #)
  70.     $(info #  \_____\__,_| \_/ \__,_|_|  |_|\__,_/_/ \_\ #)
  71.     $(info #                                             #)
  72.     $(info #      Copyright 2016 Leonardo Mariscal.      #)
  73.     $(info #                                             #)
  74.     $(info ===============================================)
  75.     $(info )
  76.  
  77. .PHONY: link-banner
  78. link-banner:
  79.     $(info )
  80.     $(info --------- Link [build-link] ------------------------------)
  81.     $(info )
  82.  
  83. .PHONY: compile-banner
  84. compile-banner:
  85.     $(info )
  86.     $(info --------- Compile [build-compile] ------------------------------)
  87.     $(info )
  88.  
  89. .PHONY: clean
  90. clean: header-banner
  91.     $(info )
  92.     $(info --------- Clean [clean] ------------------------------)
  93.     $(info )
  94.     $(foreach O,$(wildcard $(OBJ_DIR)/*),$(info [RM] ${O}))
  95.     $(foreach O,$(wildcard $(BIN_DIR)/*),$(info [RM] ${O}))
  96.     @rm -r $(OBJ_DIR)/* $(BIN_DIR)/*
  97.     $(info )
  98.     $(info --------- Done [clean] ------------------------------)
  99.     $(info )
  100.  
  101. .PHONY: run
  102. run:
  103.     $(info )
  104.     $(info --------- Run [run] ------------------------------)
  105.     $(info )
  106.     @./$(BIN_EXE)
Advertisement
Add Comment
Please, Sign In to add comment