c.mk 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 += $(PKG_CFLAGS)
  37. LDFLAGS += $(PKG_LDFLAGS)
  38. # GNU-compliant install directories
  39. prefix ?= /usr/local
  40. exec_prefix ?= $(prefix)
  41. bindir ?= $(exec_prefix)/bin
  42. # Targets
  43. .PHONY: clean
  44. all: $(BIN)
  45. %.o: %.c
  46. @echo " CC $@"
  47. $(Q)$(CC) -c $(CFLAGS) -o $@ $<
  48. $(BIN): $(OBJS)
  49. @echo " LD $@"
  50. $(Q)$(CC) $(OBJS) -o $@ $(LDFLAGS)
  51. clean:
  52. $(Q)rm -f $(BIN) $(OBJS)
  53. install: $(BIN)
  54. $(Q)install -D -m 755 $(BIN) $(DESTDIR)$(bindir)/$(BIN)