c.mk 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #
  2. # c.mk - Generic Makefile for Linux toy applications
  3. #
  4. # Required variables:
  5. #
  6. # - $(SRC): C source files
  7. # - $(BIN): filename of linked binary
  8. #
  9. # Optional variables:
  10. #
  11. # - $(PKG_DEPS): List of pkg-config compatible packages
  12. # - $(CFLAGS), $(LDFLAGS), GNU compliant directories
  13. #
  14. # Example Makefile:
  15. #
  16. # PKG_DEPS = glib-2.0
  17. # SRC = foo.c
  18. # BIN = bar
  19. #
  20. # include c.mk
  21. #
  22. ifeq ($V, 1)
  23. Q =
  24. else
  25. Q = @
  26. endif
  27. OBJS = $(patsubst %.c,%.o,$(SRC))
  28. # Determine C flags and ld flags
  29. ifdef PKG_DEPS
  30. PKG_CFLAGS = $(shell pkg-config --cflags $(PKG_DEPS))
  31. PKG_LDFLAGS = $(shell pkg-config --libs $(PKG_DEPS))
  32. else
  33. PKG_CFLAGS =
  34. PKG_LDFLAGS =
  35. endif
  36. CFLAGS ?= -Wall -Werror -O2
  37. CFLAGS += $(PKG_CFLAGS) -std=c99
  38. LDFLAGS += $(PKG_LDFLAGS)
  39. # GNU-compliant install directories
  40. prefix ?= /usr/local
  41. exec_prefix ?= $(prefix)
  42. bindir ?= $(exec_prefix)/bin
  43. # Targets
  44. .PHONY: clean
  45. all: $(BIN)
  46. %.o: %.c
  47. @echo " CC $@"
  48. $(Q)$(CC) -c $(CFLAGS) -o $@ $<
  49. $(BIN): $(OBJS)
  50. @echo " LD $@"
  51. $(Q)$(CC) $(OBJS) -o $@ $(LDFLAGS)
  52. clean:
  53. $(Q)rm -f $(BIN) $(OBJS)
  54. install: $(BIN)
  55. $(Q)install -D -m 755 $(BIN) $(DESTDIR)$(bindir)/$(BIN)