Advertisement
tehcmn

My Go-to makefile

Apr 5th, 2014
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 2.30 KB | None | 0 0
  1. #Compiler to use
  2. CC      =g++
  3.  
  4. #For packaging
  5. #cjvf = .tar.bz2
  6. #czvf = .tar.gz
  7. #cxvf = .tar.xz
  8. #TODO: add auto debian & APK packaging
  9. # I shall add Android as a build target in the future.
  10. TAROPTS     =cjvf
  11. TAR     =tar
  12. DISTEXT     =.bz2
  13.  
  14. #C++ standard: use C++11 by default for extra
  15. # goodies like nullptr, auto & for(<T> x:y)
  16. CSTD        =gnu++0x
  17.  
  18. #different CFLAGS for different targets
  19. CFLAGS_DEBUG    =-DDEBUG -g -Wall -O0 -std=$(CSTD)
  20. CFLAGS_RELEASE  =-DDEBUG -O3 -mmmx -msse -std=$(CSTD)
  21.  
  22. #select your target here
  23. CFLAGS      =$(CFLAGS_DEBUG)
  24. #CFLAGS     =$(CFLAGS_RELEASE)
  25.  
  26. #linker flags; standard stuff
  27. #IMPORTANT: -lm should ALWAYS come first
  28. LDFLAGS     =-lm -lSDL2 -lSDL2_image -lSDL2_ttf
  29.  
  30. #don't touch these lines; they automatically
  31. # glob all C++ files so no editing is needed. At all.
  32. SOURCES     :=$(shell ls *.cpp)
  33. BLOBS       =$(SOURCES:.cpp=.o)
  34.  
  35. #comment out the REDIRECT line to enable gcc output
  36. #you will need to remove @ at start of lines, too
  37. REDIRECT_CMD    =1>/dev/null
  38. REDIRECT    =$(REDIRECT_CMD)
  39.  
  40. #output file name (the final executable)
  41. OUTPUT      =a.out
  42.  
  43. #version
  44. VERSION     =0.0.1
  45.  
  46. #auto detect OS
  47. #will be one of LINUX DARWIN CYGWIN_NT UWIN FREEBSD etc.
  48. OPSYS       :=$(shell uname | tr '[:lower:]' '[:upper:]' | cut -f1 -d "-")
  49.  
  50. #get PWD
  51. WD      :=$(shell pwd)
  52.  
  53. #defines
  54. #eg. you can use { "Starting on "<< OS << endl } or
  55. #
  56. #   #ifdef LINUX
  57. #       //do linux stuff
  58. #   #elsifdef CYGWIN_NT
  59. #       //do windows stuff
  60. #   #elsedef
  61. #       //do generic fallback stuff
  62. #
  63. # -D$(OPSYS) is provided mainly for ease of porting to a different platform.
  64. DEFINES_ALL =-DOS=$(OPSYS) -D$(OPSYS)
  65. DEFINES_DEBUG   =$(DEFINES_ALL) -DDEBUG
  66. DEFINES_RELEASE =$(DEFINES_ALL) -DRELEASE
  67. DEFINES     =$(DEFINES_DEBUG)
  68.  
  69. all: init $(SOURCES) $(OUTPUT) final
  70.  
  71. devel: clean all
  72.  
  73. init:
  74.     @echo "Building $(OUTPUT) for $(OPSYS)..."
  75.  
  76. $(OUTPUT): $(BLOBS)
  77.     @echo "[Link] $< -> $@"
  78.     @$(CC) $(LDFLAGS) $(BLOBS) -o $@ $(REDIRECT)
  79.  
  80. .cpp.o:
  81.     @echo "[Comp] $< -> $@"
  82.     @$(CC) $(CFLAGS) -c $< $(REDIRECT)
  83.  
  84. clean:
  85.     @echo "Cleaning up..."
  86.     @rm -rf $(BLOBS) $(OUTPUT) dist/*
  87.  
  88. dist: clean
  89.     @echo "Creating distribution package..."
  90.     @cd dist
  91.     @$(TAR) --exclude dist -$(TAROPTS) \
  92.         dist/$(OUTPUT)-$(VERSION).tar$(DISTEXT) \
  93.         ./*
  94.     @echo "Look in dist/ for your package."
  95. final:
  96.     @echo "Built $(OUTPUT), $(shell wc -c a.out | cut -f1 -d ' ') bytes."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement