GNUmakefile 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. ##############################################################################
  2. # GNU Make 3.82+ Makefile
  3. #
  4. # Usage:
  5. # $ gmake [compiler={gcc|clang}] [std={98|11|14|17|20|23}] [pic=1]
  6. include ../src/defs.mk
  7. OBJSUFF = o
  8. ARSUFF = a
  9. std = 17
  10. ifndef compiler
  11. OS := $(shell uname)
  12. ifeq ($(OS),Linux)
  13. compiler = gcc
  14. else ifeq ($(OS),FreeBSD)
  15. compiler = clang
  16. endif
  17. endif
  18. ##############################################################################
  19. ifeq ($(compiler),gcc)
  20. CC := g++ -std=c++$(std) -pthread
  21. CFLAGS := -pedantic-errors -DNDEBUG -O3 -ffunction-sections -fdata-sections
  22. WARNS := $(if $(filter 98,$(std)),-Wno-long-long)
  23. CFLAGS_PIC = -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
  24. ##############################################################################
  25. else ifeq ($(compiler),clang)
  26. CC := clang++ -std=c++$(std) -pthread
  27. CFLAGS := -pedantic-errors -DNDEBUG -O3
  28. WARNS := $(if $(filter 98,$(std)),-Wno-long-long )-Wno-non-literal-null-conversion
  29. CFLAGS_PIC = -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
  30. endif
  31. ##############################################################################
  32. LIBSUFFIX = $(std)$(if $(pic),_pic)
  33. LIBFILE := lib$(LIBNAME)$(LIBSUFFIX).$(ARSUFF)
  34. CFLAGS_ALL = -I../include $(if $(pic),$(CFLAGS_PIC) )$(CFLAGS) $(WARNS)
  35. AR = ar
  36. ARFLAGS = s
  37. ARFLAGS_ALL = r$(ARFLAGS) $@
  38. ifndef SOURCES
  39. SOURCES := $(wildcard *.cpp)
  40. endif
  41. OBJS := $(patsubst %.cpp,%.$(OBJSUFF),$(SOURCES))
  42. .PHONY: clean
  43. include ../src/rules.mk