makefile 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. ### variables ###
  2. #
  3. # project stats
  4. #
  5. PROJECT_NAME=avdl-cengine
  6. PROJECT_VERSION=1.0.0
  7. #
  8. # directories
  9. #
  10. #
  11. # SRC: source files directory
  12. # BUILD: compiled build directory (everything compiled belongs here)
  13. # OBJ: compiled objects directory
  14. # DIRECTORIES: directories that should be created if they don't exist
  15. #
  16. DIRECTORY_SRC=src
  17. DIRECTORY_BUILD=build
  18. DIRECTORY_OBJ=${DIRECTORY_BUILD}/objects
  19. DIRECTORIES=${DIRECTORY_BUILD} ${DIRECTORY_OBJ}
  20. #
  21. # source files
  22. #
  23. SRC=$(wildcard ${DIRECTORY_SRC}/*.c)
  24. OBJ=${SRC:${DIRECTORY_SRC}/%.c=${DIRECTORY_OBJ}/%.o}
  25. HEADERS=$(wildcard include/*.h)
  26. #
  27. # compiler flags
  28. #
  29. #COMPILER_FLAGS=-Wall -Werror -Wpedantic
  30. COMPILER_FLAGS=-Wall -Wpedantic -Wformat-security
  31. #
  32. # output library
  33. #
  34. STATIC_OUT=${DIRECTORY_BUILD}/lib${PROJECT_NAME}.a
  35. #
  36. # install data
  37. #
  38. prefix=/usr/local
  39. ### recipes ###
  40. #
  41. # compile the whole library
  42. #
  43. all: ${DIRECTORIES} ${STATIC_OUT}
  44. #
  45. # create static library
  46. #
  47. ${STATIC_OUT}: ${OBJ}
  48. ar rcs $@ $^
  49. #
  50. # make sure compiled build directories exist
  51. #
  52. ${DIRECTORIES}:
  53. mkdir $@
  54. #
  55. # compile source files to object files
  56. #
  57. ${DIRECTORY_OBJ}/%.o: ${DIRECTORY_SRC}/%.c ${HEADERS}
  58. ${CC} ${COMPILER_FLAGS} -Iinclude -DDD_PLATFORM_NATIVE -o $@ -c $<
  59. #
  60. # install library
  61. #
  62. install: ${STATIC_OUT}
  63. mkdir -p ${DESTDIR}${prefix}/include
  64. install -m644 ${HEADERS} ${DESTDIR}${prefix}/include
  65. mkdir -p ${DESTDIR}${prefix}/lib
  66. install -m755 ${STATIC_OUT} ${DESTDIR}${prefix}/lib
  67. #
  68. # clean working directory
  69. #
  70. clean:
  71. rm -f ${OBJ} ${STATIC_OUT}
  72. #
  73. # phony recipes
  74. #
  75. .PHONY: clean