Makefile 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. CJSON_OBJ = cJSON.o
  2. UTILS_OBJ = cJSON_Utils.o
  3. CJSON_LIBNAME = libcjson
  4. UTILS_LIBNAME = libcjson_utils
  5. CJSON_TEST = cJSON_test
  6. UTILS_TEST = cJSON_test_utils
  7. LDLIBS = -lm
  8. LIBVERSION = 1.0.2
  9. CJSON_SOVERSION = 1
  10. UTILS_SOVERSION = 1
  11. PREFIX ?= /usr/local
  12. INCLUDE_PATH ?= include/cjson
  13. LIBRARY_PATH ?= lib
  14. INSTALL_INCLUDE_PATH = $(DESTDIR)$(PREFIX)/$(INCLUDE_PATH)
  15. INSTALL_LIBRARY_PATH = $(DESTDIR)$(PREFIX)/$(LIBRARY_PATH)
  16. INSTALL ?= cp -a
  17. R_CFLAGS = -fPIC -std=c89 -pedantic -Wall -Werror -Wstrict-prototypes -Wwrite-strings $(CFLAGS)
  18. uname := $(shell sh -c 'uname -s 2>/dev/null || echo false')
  19. #library file extensions
  20. SHARED = so
  21. STATIC = a
  22. ## create dynamic (shared) library on Darwin (base OS for MacOSX and IOS)
  23. ifeq (Darwin, $(uname))
  24. SHARED = dylib
  25. endif
  26. #cJSON library names
  27. CJSON_SHARED = $(CJSON_LIBNAME).$(SHARED)
  28. CJSON_SHARED_VERSION = $(CJSON_LIBNAME).$(SHARED).$(LIBVERSION)
  29. CJSON_SHARED_SO = $(CJSON_LIBNAME).$(SHARED).$(CJSON_SOVERSION)
  30. CJSON_STATIC = $(CJSON_LIBNAME).$(STATIC)
  31. #cJSON_Utils library names
  32. UTILS_SHARED = $(UTILS_LIBNAME).$(SHARED)
  33. UTILS_SHARED_VERSION = $(UTILS_LIBNAME).$(SHARED).$(LIBVERSION)
  34. UTILS_SHARED_SO = $(UTILS_LIBNAME).$(SHARED).$(UTILS_SOVERSION)
  35. UTILS_STATIC = $(UTILS_LIBNAME).$(STATIC)
  36. SHARED_CMD = $(CC) -shared -o
  37. .PHONY: all shared static tests clean install
  38. all: shared static tests
  39. shared: $(CJSON_SHARED) $(UTILS_SHARED)
  40. static: $(CJSON_STATIC) $(UTILS_STATIC)
  41. tests: $(CJSON_TEST) $(UTILS_TEST)
  42. test: tests
  43. ./$(CJSON_TEST)
  44. ./$(UTILS_TEST)
  45. .c.o:
  46. $(CC) -ansi -pedantic -c $(R_CFLAGS) $<
  47. #tests
  48. #cJSON
  49. $(CJSON_TEST): cJSON.c cJSON.h test.c
  50. $(CC) $^ -o $@ $(LDLIBS) -I.
  51. #cJSON_Utils
  52. $(UTILS_TEST): cJSON.c cJSON.h test.c
  53. $(CC) $^ -o $@ $(LDLIBS) -I.
  54. #static libraries
  55. #cJSON
  56. $(CJSON_STATIC): $(CJSON_OBJ)
  57. $(AR) rcs $@ $<
  58. #cJSON_Utils
  59. $(UTILS_STATIC): $(UTILS_OBJ)
  60. $(AR) rcs $@ $<
  61. #shared libraries .so.1.0.0
  62. #cJSON
  63. $(CJSON_SHARED_VERSION): $(CJSON_OBJ)
  64. $(CC) -shared -o $@ $< $(LDFLAGS)
  65. #cJSON_Utils
  66. $(UTILS_SHARED_VERSION): $(UTILS_OBJ)
  67. $(CC) -shared -o $@ $< $(LDFLAGS)
  68. #objects
  69. #cJSON
  70. $(CJSON_OBJ): cJSON.c cJSON.h
  71. #cJSON_Utils
  72. $(UTILS_OBJ): cJSON_Utils.c cJSON_Utils.h
  73. #links .so -> .so.1 -> .so.1.0.0
  74. #cJSON
  75. $(CJSON_SHARED_SO): $(CJSON_SHARED_VERSION)
  76. ln -s $(CJSON_SHARED_VERSION) $(CJSON_SHARED_SO)
  77. $(CJSON_SHARED): $(CJSON_SHARED_SO)
  78. ln -s $(CJSON_SHARED_SO) $(CJSON_SHARED)
  79. #cJSON_Utils
  80. $(UTILS_SHARED_SO): $(UTILS_SHARED_VERSION)
  81. ln -s $(UTILS_SHARED_VERSION) $(UTILS_SHARED_SO)
  82. $(UTILS_SHARED): $(UTILS_SHARED_SO)
  83. ln -s $(UTILS_SHARED_SO) $(UTILS_SHARED)
  84. #install
  85. #cJSON
  86. install-cjson:
  87. mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)
  88. $(INSTALL) cJSON.h $(INSTALL_INCLUDE_PATH)
  89. $(INSTALL) $(CJSON_SHARED) $(CJSON_SHARED_SO) $(CJSON_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)
  90. #cJSON_Utils
  91. install-utils: install-cjson
  92. $(INSTALL) cJSON_Utils.h $(INSTALL_INCLUDE_PATH)
  93. $(INSTALL) $(UTILS_SHARED) $(UTILS_SHARED_SO) $(UTILS_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)
  94. install: install-cjson install-utils
  95. #uninstall
  96. #cJSON
  97. uninstall-cjson: uninstall-utils
  98. $(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED)
  99. $(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED_VERSION)
  100. $(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED_SO)
  101. rmdir $(INSTALL_LIBRARY_PATH)
  102. $(RM) $(INSTALL_INCLUDE_PATH)/cJSON.h
  103. rmdir $(INSTALL_INCLUDE_PATH)
  104. #cJSON_Utils
  105. uninstall-utils:
  106. $(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED)
  107. $(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED_VERSION)
  108. $(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED_SO)
  109. $(RM) $(INSTALL_INCLUDE_PATH)/cJSON_Utils.h
  110. uninstall: uninstall-utils uninstall-cjson
  111. clean:
  112. $(RM) $(CJSON_OBJ) $(UTILS_OBJ) #delete object files
  113. $(RM) $(CJSON_SHARED) $(CJSON_SHARED_VERSION) $(CJSON_SHARED_SO) $(CJSON_STATIC) #delete cJSON
  114. $(RM) $(UTILS_SHARED) $(UTILS_SHARED_VERSION) $(UTILS_SHARED_SO) $(UTILS_STATIC) #delete cJSON_Utils
  115. $(RM) $(CJSON_TEST) $(UTILS_TEST) #delete tests