From f667ba231d17f46b1f0863a31d5b4d32744e4958 Mon Sep 17 00:00:00 2001 From: hevake_lcj Date: Thu, 21 Jul 2022 11:44:15 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=B0=86third=5Fparty=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E4=B8=BA3rd-party=EF=BC=9B=E5=B0=86apps/cpp=5Ftbox?= =?UTF-8?q?=E7=A7=BB=E5=88=B03rd-party=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 23 +- {third_party => 3rd-party}/Makefile | 9 + {third_party => 3rd-party}/cJSON/Makefile | 0 3rd-party/cJSON/src | 1 + 3rd-party/cpp-tbox | 1 + {third_party => 3rd-party}/libev/Makefile | 0 {third_party => 3rd-party}/libev/src | 0 {third_party => 3rd-party}/libevent/Makefile | 0 3rd-party/libevent/src | 1 + {third_party => 3rd-party}/mosquitto/Makefile | 0 .../mosquitto/patches/01-config.patch | 0 3rd-party/mosquitto/src | 1 + .../nlohmann/LICENSE.MIT | 0 {third_party => 3rd-party}/nlohmann/Makefile | 0 {third_party => 3rd-party}/nlohmann/json.hpp | 0 .../nlohmann/json_fwd.hpp | 0 Makefile | 6 +- apps/Makefile | 8 - apps/cpp_tbox | 1 - apps/sample/Makefile | 2 +- third_party/cJSON/src | 1 - third_party/libevent/src | 1 - third_party/mosquitto/src | 1 - tools/exe_common.mk | 146 ++++++++++++ tools/lib_common.mk | 225 ++++++++++++++++++ 25 files changed, 400 insertions(+), 27 deletions(-) rename {third_party => 3rd-party}/Makefile (67%) rename {third_party => 3rd-party}/cJSON/Makefile (100%) create mode 160000 3rd-party/cJSON/src create mode 160000 3rd-party/cpp-tbox rename {third_party => 3rd-party}/libev/Makefile (100%) rename {third_party => 3rd-party}/libev/src (100%) rename {third_party => 3rd-party}/libevent/Makefile (100%) create mode 160000 3rd-party/libevent/src rename {third_party => 3rd-party}/mosquitto/Makefile (100%) rename {third_party => 3rd-party}/mosquitto/patches/01-config.patch (100%) create mode 160000 3rd-party/mosquitto/src rename {third_party => 3rd-party}/nlohmann/LICENSE.MIT (100%) rename {third_party => 3rd-party}/nlohmann/Makefile (100%) rename {third_party => 3rd-party}/nlohmann/json.hpp (100%) rename {third_party => 3rd-party}/nlohmann/json_fwd.hpp (100%) delete mode 160000 apps/cpp_tbox delete mode 160000 third_party/cJSON/src delete mode 160000 third_party/libevent/src delete mode 160000 third_party/mosquitto/src create mode 100644 tools/exe_common.mk create mode 100644 tools/lib_common.mk diff --git a/.gitmodules b/.gitmodules index 72bf212..466449d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,16 @@ -[submodule "apps/cpp_tbox"] - path = apps/cpp_tbox +[submodule "3rd-party/cpp-tbox"] + path = 3rd-party/cpp-tbox url = git@gitee.com:cpp-master/cpp-tbox.git -[submodule "third_party/libevent/src"] - path = third_party/libevent/src + branch = develop +[submodule "3rd-party/libevent/src"] + path = 3rd-party/libevent/src url = https://github.com/libevent/libevent.git -[submodule "third_party/mosquitto/src"] - path = third_party/mosquitto/src +[submodule "3rd-party/libev/src"] + path = 3rd-party/libev/src + url = https://github.com/enki/libev.git +[submodule "3rd-party/mosquitto/src"] + path = 3rd-party/mosquitto/src url = https://github.com/eclipse/mosquitto.git -[submodule "third_party/cJSON/src"] - path = third_party/cJSON/src +[submodule "3rd-party/cJSON/src"] + path = 3rd-party/cJSON/src url = https://github.com/DaveGamble/cJSON.git -[submodule "third_party/libev/src"] - path = third_party/libev/src - url = https://github.com/enki/libev.git diff --git a/third_party/Makefile b/3rd-party/Makefile similarity index 67% rename from third_party/Makefile rename to 3rd-party/Makefile index d675d30..33ea58d 100644 --- a/third_party/Makefile +++ b/3rd-party/Makefile @@ -10,6 +10,15 @@ targets += nlohmann #targets += libev #targets += cJSON +targets += cpp-tbox/base \ + cpp-tbox/event \ + cpp-tbox/eventx \ + cpp-tbox/util \ + cpp-tbox/log \ + cpp-tbox/network \ + cpp-tbox/terminal \ + cpp-tbox/main \ + all test clean distclean: @for i in $(targets); do \ [ ! -d $$i ] || $(MAKE) -C $$i $@ || exit $$? ; \ diff --git a/third_party/cJSON/Makefile b/3rd-party/cJSON/Makefile similarity index 100% rename from third_party/cJSON/Makefile rename to 3rd-party/cJSON/Makefile diff --git a/3rd-party/cJSON/src b/3rd-party/cJSON/src new file mode 160000 index 0000000..b45f48e --- /dev/null +++ b/3rd-party/cJSON/src @@ -0,0 +1 @@ +Subproject commit b45f48e600671feade0b6bd65d1c69de7899f2be diff --git a/3rd-party/cpp-tbox b/3rd-party/cpp-tbox new file mode 160000 index 0000000..0e910d1 --- /dev/null +++ b/3rd-party/cpp-tbox @@ -0,0 +1 @@ +Subproject commit 0e910d15e28a2518e59bea3ff6b799f5c7796629 diff --git a/third_party/libev/Makefile b/3rd-party/libev/Makefile similarity index 100% rename from third_party/libev/Makefile rename to 3rd-party/libev/Makefile diff --git a/third_party/libev/src b/3rd-party/libev/src similarity index 100% rename from third_party/libev/src rename to 3rd-party/libev/src diff --git a/third_party/libevent/Makefile b/3rd-party/libevent/Makefile similarity index 100% rename from third_party/libevent/Makefile rename to 3rd-party/libevent/Makefile diff --git a/3rd-party/libevent/src b/3rd-party/libevent/src new file mode 160000 index 0000000..3e7a738 --- /dev/null +++ b/3rd-party/libevent/src @@ -0,0 +1 @@ +Subproject commit 3e7a73809ebfd0e111856eb0b395d6a0735b6c8b diff --git a/third_party/mosquitto/Makefile b/3rd-party/mosquitto/Makefile similarity index 100% rename from third_party/mosquitto/Makefile rename to 3rd-party/mosquitto/Makefile diff --git a/third_party/mosquitto/patches/01-config.patch b/3rd-party/mosquitto/patches/01-config.patch similarity index 100% rename from third_party/mosquitto/patches/01-config.patch rename to 3rd-party/mosquitto/patches/01-config.patch diff --git a/3rd-party/mosquitto/src b/3rd-party/mosquitto/src new file mode 160000 index 0000000..ff97fbf --- /dev/null +++ b/3rd-party/mosquitto/src @@ -0,0 +1 @@ +Subproject commit ff97fbfe94b304b86167b15a68d4ae1d4502642c diff --git a/third_party/nlohmann/LICENSE.MIT b/3rd-party/nlohmann/LICENSE.MIT similarity index 100% rename from third_party/nlohmann/LICENSE.MIT rename to 3rd-party/nlohmann/LICENSE.MIT diff --git a/third_party/nlohmann/Makefile b/3rd-party/nlohmann/Makefile similarity index 100% rename from third_party/nlohmann/Makefile rename to 3rd-party/nlohmann/Makefile diff --git a/third_party/nlohmann/json.hpp b/3rd-party/nlohmann/json.hpp similarity index 100% rename from third_party/nlohmann/json.hpp rename to 3rd-party/nlohmann/json.hpp diff --git a/third_party/nlohmann/json_fwd.hpp b/3rd-party/nlohmann/json_fwd.hpp similarity index 100% rename from third_party/nlohmann/json_fwd.hpp rename to 3rd-party/nlohmann/json_fwd.hpp diff --git a/Makefile b/Makefile index 9e7c6a3..aa3ae26 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ export TOP_DIR := $(PWD) include config.mk include tools/build_env.mk -targets += third_party +targets += 3rd-party targets += apps .PHONY: all test clean distclean prepare $(targets) @@ -24,8 +24,8 @@ test: $(targets) clean: rm -rf $(OUTPUT_DIR) - make -C third_party clean + make -C 3rd-party clean distclean: clean rm -rf $(INSTALL_DIR) $(STAGING_DIR) - make -C third_party distclean + make -C 3rd-party distclean diff --git a/apps/Makefile b/apps/Makefile index 57f49dc..471222e 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -1,11 +1,3 @@ -apps += cpp_tbox/base -apps += cpp_tbox/event -apps += cpp_tbox/eventx -apps += cpp_tbox/util -apps += cpp_tbox/network -apps += cpp_tbox/terminal -apps += cpp_tbox/log -apps += cpp_tbox/main apps += sample all test clean distclean: diff --git a/apps/cpp_tbox b/apps/cpp_tbox deleted file mode 160000 index 0fac3d7..0000000 --- a/apps/cpp_tbox +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0fac3d757935d10b84b6c86e2e71bc3ee29f5ae3 diff --git a/apps/sample/Makefile b/apps/sample/Makefile index 6807b64..f3aa931 100644 --- a/apps/sample/Makefile +++ b/apps/sample/Makefile @@ -28,4 +28,4 @@ TEST_LDFLAGS += $(LDFLAGS) pre_build : touch build_time.cpp -include ../cpp_tbox/tools/exe_common.mk +include ${TOP_DIR}/tools/exe_common.mk diff --git a/third_party/cJSON/src b/third_party/cJSON/src deleted file mode 160000 index 203a0de..0000000 --- a/third_party/cJSON/src +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 203a0dec6ff06e3842fa23a1bc9825aecf56b381 diff --git a/third_party/libevent/src b/third_party/libevent/src deleted file mode 160000 index a9595cc..0000000 --- a/third_party/libevent/src +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a9595ccd7d1d6c02836d2facda0ba10bf4b66a79 diff --git a/third_party/mosquitto/src b/third_party/mosquitto/src deleted file mode 160000 index 3cbe805..0000000 --- a/third_party/mosquitto/src +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3cbe805e71ac41a2a20cc9b2ea6b3b619f49554a diff --git a/tools/exe_common.mk b/tools/exe_common.mk new file mode 100644 index 0000000..2ceddb9 --- /dev/null +++ b/tools/exe_common.mk @@ -0,0 +1,146 @@ +################################################################ +# ABOUT: +# This C++ library project Makefile's common part, which can be included +# into project's Makefile, to make Makefile is easy to maintain. +# +# HOW TO USE: +# before include this file. those variables need be specified. +# C_SRC_FILES, CC_SRC_FILES, CPP_SRC_FILES, CXXFLAGS, TEST_LDFLAGS +# OUTPUT_DIR, INSTALL_DIR +# +# TARGETS: +# all, test, clean, distclean, install, uninstall +################################################################ + +.PHONY: all print_complie_vars print_build_var print_test_vars clean distclean install uninstall pre_build post_build + +EXE_OUTPUT_DIR = $(OUTPUT_DIR)/$(EXE_NAME) + +STATIC_LIB := $(EXE_NAME) + +#TARGETS := pre_build print_vars build_exe post_build +TARGETS := pre_build build_exe post_build + +all: $(TARGETS) install + +print_vars: + @echo CXX=$(CXX) + @echo C_SRC_FILES=$(C_SRC_FILES) + @echo CC_SRC_FILES=$(CC_SRC_FILES) + @echo CPP_SRC_FILES=$(CPP_SRC_FILES) + @echo OUTPUT_DIR=$(OUTPUT_DIR) + @echo STAGING_DIR=$(STAGING_DIR) + @echo INSTALL_DIR=$(INSTALL_DIR) + +################################################################ +# exe +################################################################ + +CPP_SOURCE_TO_OBJECT = $(EXE_OUTPUT_DIR)/$(subst .cpp,.o,$(1)) +CC_SOURCE_TO_OBJECT = $(EXE_OUTPUT_DIR)/$(subst .cc,.o,$(1)) +C_SOURCE_TO_OBJECT = $(EXE_OUTPUT_DIR)/$(subst .c,.o,$(1)) + +OBJECTS := $(foreach src,$(CPP_SRC_FILES),$(call CPP_SOURCE_TO_OBJECT,$(src))) +OBJECTS += $(foreach src,$(CC_SRC_FILES),$(call CC_SOURCE_TO_OBJECT,$(src))) +OBJECTS += $(foreach src,$(C_SRC_FILES),$(call C_SOURCE_TO_OBJECT,$(src))) + +define CREATE_CPP_OBJECT +$(call CPP_SOURCE_TO_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(CXXFLAGS) -o $$@ -c $$^ +endef + +define CREATE_CC_OBJECT +$(call CC_SOURCE_TO_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(CXXFLAGS) -o $$@ -c $$^ +endef + +define CREATE_C_OBJECT +$(call C_SOURCE_TO_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $^\033[0m" + @install -d $$(dir $$@) + @$(CC) $(CFLAGS) -o $$@ -c $$^ +endef + +$(foreach src,$(CPP_SRC_FILES),$(eval $(call CREATE_CPP_OBJECT,$(src)))) +$(foreach src,$(CC_SRC_FILES),$(eval $(call CREATE_CC_OBJECT,$(src)))) +$(foreach src,$(C_SRC_FILES),$(eval $(call CREATE_C_OBJECT,$(src)))) + +print_exe_vars : + @echo CXXFLAGS=$(CXXFLAGS) + @echo EXE_NAME=$(EXE_NAME) + @echo OBJECTS=$(OBJECTS) + +$(EXE_OUTPUT_DIR)/$(EXE_NAME) : $(OBJECTS) + @echo "\033[35mBUILD $(EXE_NAME) \033[0m" + @install -d $(dir $@) + @$(CXX) -o $@ $(OBJECTS) $(LDFLAGS) -rdynamic + +#build_exe : print_exe_vars $(EXE_OUTPUT_DIR)/$(EXE_NAME) +build_exe : $(EXE_OUTPUT_DIR)/$(EXE_NAME) + +################################################################ +# test +################################################################ + +CPP_SOURCE_TO_TEST_OBJECT = $(EXE_OUTPUT_DIR)/$(subst .cpp,.oT,$(1)) +C_SOURCE_TO_TEST_OBJECT = $(EXE_OUTPUT_DIR)/$(subst .c,.oT,$(1)) + +TEST_OBJECTS := $(foreach src,$(TEST_CPP_SRC_FILES),$(call CPP_SOURCE_TO_TEST_OBJECT,$(src))) +TEST_CXXFLAGS := $(CXXFLAGS) + +define CREATE_CPP_TEST_OBJECT +$(call CPP_SOURCE_TO_TEST_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(TEST_CXXFLAGS) -o $$@ -c $$^ +endef + +$(foreach src,$(TEST_CPP_SRC_FILES),$(eval $(call CREATE_CPP_TEST_OBJECT,$(src)))) + +print_test_vars : + @echo TEST_CXXFLAGS=$(TEST_CXXFLAGS) + @echo TEST_OBJECTS=$(TEST_OBJECTS) + @echo TEST_LDFLAGS=$(TEST_LDFLAGS) + +$(EXE_OUTPUT_DIR)/test: $(TEST_OBJECTS) $(OBJECTS) + @echo "\033[35mBUILD test\033[0m" + @$(CXX) -o $@ $(TEST_OBJECTS) $(OBJECTS) $(TEST_LDFLAGS) -lgmock_main -lgmock -lgtest -lpthread + +#test : print_test_vars $(EXE_OUTPUT_DIR)/test +test : $(EXE_OUTPUT_DIR)/test + +################################################################ +# install and uninstall +################################################################ + +# install head files +SRC_CONF_TO_INSTALL_CONF = $(addprefix $(INSTALL_DIR)/etc/$(EXE_NAME)/,$(1)) + +define CREATE_INSTALL_CONF_TARGET +$(call SRC_CONF_TO_INSTALL_CONF,$(1)) : $(1) + @install -Dm 640 $$^ $$@ +endef + +$(foreach src,$(CONF_FILES),$(eval $(call CREATE_INSTALL_CONF_TARGET,$(src)))) + +INSTALL_CONFS := $(foreach src,$(CONF_FILES),$(call SRC_CONF_TO_INSTALL_CONF,$(src))) + +INSTALL_EXE := $(INSTALL_DIR)/bin/$(EXE_NAME) +$(INSTALL_EXE) : $(EXE_OUTPUT_DIR)/$(EXE_NAME) + @install -Dm 750 $^ $@ + +install: $(INSTALL_EXE) $(INSTALL_CONFS) + +uninstall: + rm -f $(INSTALL_DIR)/bin/$(EXE_NAME) + +################################################################ +# clean +################################################################ +clean: + -rm -f $(OBJECTS) + diff --git a/tools/lib_common.mk b/tools/lib_common.mk new file mode 100644 index 0000000..8da1c8e --- /dev/null +++ b/tools/lib_common.mk @@ -0,0 +1,225 @@ +################################################################ +# ABOUT: +# This C++ library project Makefile's common part, which can be included +# into project's Makefile, to make Makefile is easy to maintain. +# +# HOW TO USE: +# before include this file. those variables need be specified. +# LIB_VERSION_X, LIB_VERSION_Y, LIB_VERSION_Z, C_SRC_FILES, CC_SRC_FILES, CPP_SRC_FILES, CXXFLAGS, TEST_LDFLAGS +# OUTPUT_DIR, STAGING_DIR, INSTALL_DIR +# +# TARGETS: +# all, libxxx.a, libxxx.so.x.x.x, test, clean, distclean, install, uninstall +################################################################ + +.PHONY: all print_vars print_static_vars print_shared_vars print_test_vars clean distclean install uninstall pre_build post_build + +LIB_BASENAME = lib$(LIB_NAME)$(LIB_NAME_EXT) +LIB_OUTPUT_DIR = $(OUTPUT_DIR)/$(LIB_NAME) + +STATIC_LIB := $(LIB_BASENAME).a +SHARED_LIB := $(LIB_BASENAME).so.$(LIB_VERSION_X).$(LIB_VERSION_Y).$(LIB_VERSION_Z) + +ENABLE_STATIC_LIB ?= yes +ENABLE_SHARED_LIB ?= yes + +TARGETS := pre_build #print_vars + +ifeq ($(ENABLE_STATIC_LIB),yes) + TARGETS += build_static_lib +endif + +ifeq ($(ENABLE_SHARED_LIB),yes) + TARGETS += build_shared_lib +endif + +TARGETS += post_build + +all: $(TARGETS) install + +print_vars: + @echo CXX=$(CXX) + @echo C_SRC_FILES=$(C_SRC_FILES) + @echo CC_SRC_FILES=$(CC_SRC_FILES) + @echo CPP_SRC_FILES=$(CPP_SRC_FILES) + @echo OUTPUT_DIR=$(OUTPUT_DIR) + @echo STAGING_DIR=$(STAGING_DIR) + @echo INSTALL_DIR=$(INSTALL_DIR) + +################################################################ +# static library +################################################################ + +CPP_SOURCE_TO_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .cpp,.o,$(1)) +CC_SOURCE_TO_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .cc,.o,$(1)) +C_SOURCE_TO_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .c,.o,$(1)) + +OBJECTS := $(foreach src,$(CPP_SRC_FILES),$(call CPP_SOURCE_TO_OBJECT,$(src))) +OBJECTS += $(foreach src,$(CC_SRC_FILES),$(call CC_SOURCE_TO_OBJECT,$(src))) +OBJECTS += $(foreach src,$(C_SRC_FILES),$(call C_SOURCE_TO_OBJECT,$(src))) + +define CREATE_CPP_OBJECT +$(call CPP_SOURCE_TO_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(CXXFLAGS) -o $$@ -c $$^ +endef + +define CREATE_CC_OBJECT +$(call CC_SOURCE_TO_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(CXXFLAGS) -o $$@ -c $$^ +endef + +define CREATE_C_OBJECT +$(call C_SOURCE_TO_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $^\033[0m" + @$(CC) $(CFLAGS) -o $@ -c $^ +endef + +$(foreach src,$(CPP_SRC_FILES),$(eval $(call CREATE_CPP_OBJECT,$(src)))) +$(foreach src,$(CC_SRC_FILES),$(eval $(call CREATE_CC_OBJECT,$(src)))) +$(foreach src,$(C_SRC_FILES),$(eval $(call CREATE_C_OBJECT,$(src)))) + +print_static_vars : + @echo CXXFLAGS=$(CXXFLAGS) + @echo OBJECTS=$(OBJECTS) + +$(LIB_OUTPUT_DIR)/$(STATIC_LIB) : $(OBJECTS) + @echo "\033[35mBUILD $(STATIC_LIB) \033[0m" + @install -d $(dir $@) + @$(AR) rc $@ $(OBJECTS) + +#build_static_lib : print_static_vars $(LIB_OUTPUT_DIR)/$(STATIC_LIB) +build_static_lib : $(LIB_OUTPUT_DIR)/$(STATIC_LIB) + +################################################################ +# shared library +################################################################ + +CPP_SOURCE_TO_SHARED_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .cpp,.oS,$(1)) +CC_SOURCE_TO_SHARED_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .cc,.oS,$(1)) +C_SOURCE_TO_SHARED_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .c,.oS,$(1)) + +SHARED_OBJECTS := $(foreach src,$(CPP_SRC_FILES),$(call CPP_SOURCE_TO_SHARED_OBJECT,$(src))) +SHARED_OBJECTS += $(foreach src,$(CC_SRC_FILES),$(call CC_SOURCE_TO_SHARED_OBJECT,$(src))) +SHARED_OBJECTS += $(foreach src,$(C_SRC_FILES),$(call C_SOURCE_TO_SHARED_OBJECT,$(src))) + +SHARED_CXXFLAGS := $(CXXFLAGS) -fPIC +SHARED_CFLAGS := $(CFLAGS) -fPIC + +define CREATE_CPP_SHARED_OBJECT +$(call CPP_SOURCE_TO_SHARED_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(SHARED_CXXFLAGS) -o $$@ -c $$^ +endef + +define CREATE_CC_SHARED_OBJECT +$(call CC_SOURCE_TO_SHARED_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(SHARED_CXXFLAGS) -o $$@ -c $$^ +endef + +define CREATE_C_SHARED_OBJECT +$(call C_SOURCE_TO_SHARED_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $^\033[0m" + @$(CC) $(SHARED_CFLAGS) -o $@ -c $^ +endef + +$(foreach src,$(CPP_SRC_FILES),$(eval $(call CREATE_CPP_SHARED_OBJECT,$(src)))) +$(foreach src,$(CC_SRC_FILES),$(eval $(call CREATE_CC_SHARED_OBJECT,$(src)))) +$(foreach src,$(C_SRC_FILES),$(eval $(call CREATE_C_SHARED_OBJECT,$(src)))) + +print_shared_vars : + @echo SHARED_CXXFLAGS=$(SHARED_CXXFLAGS) + @echo SHARED_OBJECTS=$(SHARED_OBJECTS) + +$(LIB_OUTPUT_DIR)/$(SHARED_LIB) : $(SHARED_OBJECTS) + @echo "\033[35mBUILD $(SHARED_LIB)\033[0m" + @$(CXX) -shared $(SHARED_OBJECTS) -Wl,-soname,$(LIB_BASENAME).so.$(LIB_VERSION_X).$(LIB_VERSION_Y) -o $@ + +#build_shared_lib : print_shared_vars $(LIB_OUTPUT_DIR)/$(SHARED_LIB) +build_shared_lib : $(LIB_OUTPUT_DIR)/$(SHARED_LIB) + +################################################################ +# test +################################################################ + +CPP_SOURCE_TO_TEST_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .cpp,.oT,$(1)) +C_SOURCE_TO_TEST_OBJECT = $(LIB_OUTPUT_DIR)/$(subst .c,.oT,$(1)) + +TEST_OBJECTS := $(foreach src,$(TEST_CPP_SRC_FILES),$(call CPP_SOURCE_TO_TEST_OBJECT,$(src))) +TEST_CXXFLAGS := $(CXXFLAGS) + +define CREATE_CPP_TEST_OBJECT +$(call CPP_SOURCE_TO_TEST_OBJECT,$(1)) : $(1) + @echo "\033[32mCXX $$^\033[0m" + @install -d $$(dir $$@) + @$(CXX) $(TEST_CXXFLAGS) -o $$@ -c $$^ +endef + +$(foreach src,$(TEST_CPP_SRC_FILES),$(eval $(call CREATE_CPP_TEST_OBJECT,$(src)))) + +print_test_vars : + @echo TEST_CXXFLAGS=$(TEST_CXXFLAGS) + @echo TEST_OBJECTS=$(TEST_OBJECTS) + @echo TEST_LDFLAGS=$(TEST_LDFLAGS) + +$(LIB_OUTPUT_DIR)/test: $(TEST_OBJECTS) $(OBJECTS) + @echo "\033[35mBUILD test\033[0m" + @$(CXX) -o $@ $(TEST_OBJECTS) $(OBJECTS) $(TEST_LDFLAGS) -lgmock_main -lgmock -lgtest -lpthread + +#test : print_test_vars $(LIB_OUTPUT_DIR)/test +test : $(LIB_OUTPUT_DIR)/test + +################################################################ +# install and uninstall +################################################################ + +# install head files +SRC_HEAD_TO_INSTALL_HEAD = $(addprefix $(STAGING_DIR)/include/$(LIB_NAME)/,$(1)) + +define CREATE_INSTALL_HEAD_TARGET +$(call SRC_HEAD_TO_INSTALL_HEAD,$(1)) : $(1) + @install -Dm 640 $$^ $$@ +endef + +$(foreach src,$(HEAD_FILES),$(eval $(call CREATE_INSTALL_HEAD_TARGET,$(src)))) + +INSTALL_HEADS := $(foreach src,$(HEAD_FILES),$(call SRC_HEAD_TO_INSTALL_HEAD,$(src))) + +# install static library +ifeq ($(ENABLE_STATIC_LIB),yes) +INSTALL_STATIC_LIB := $(STAGING_DIR)/lib/$(STATIC_LIB) +$(INSTALL_STATIC_LIB) : $(LIB_OUTPUT_DIR)/$(STATIC_LIB) + @install -Dm 640 $^ $@ +endif + +# install shared library +ifeq ($(ENABLE_SHARED_LIB),yes) +INSTALL_SHARED_LIB := $(INSTALL_DIR)/lib/$(SHARED_LIB) +$(INSTALL_SHARED_LIB) : $(LIB_OUTPUT_DIR)/$(SHARED_LIB) + @install -d $(dir $@) + @cd $(dir $@); \ + rm -f $(LIB_BASENAME).so*; \ + install -Dm 750 $^ $@; \ + ln -s $(SHARED_LIB) $(LIB_BASENAME).so; \ + ln -s $(SHARED_LIB) $(LIB_BASENAME).so.$(LIB_VERSION_X).$(LIB_VERSION_Y) +endif + +install: $(INSTALL_HEADS) $(INSTALL_STATIC_LIB) $(INSTALL_SHARED_LIB) + +uninstall: + rm -rf $(STAGING_DIR)/include/$(LIB_NAME) + rm -f $(STAGING_DIR)/lib/$(LIB_BASENAME).a + rm -f $(INSTALL_DIR)/lib/$(LIB_BASENAME).so* + +################################################################ +# clean and distclean +################################################################ +clean: + -rm -f $(OBJECTS) $(SHARED_OBJECTS) $(TEST_OBJECTS) + -- Gitee From de837da7f9a6c2f200a7d71225d32584710a988c Mon Sep 17 00:00:00 2001 From: hevake_lcj Date: Thu, 21 Jul 2022 11:48:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=863rd-party/Makefi?= =?UTF-8?q?le=E7=9A=84=E4=B8=ADcJSON=E7=9A=84=E7=BC=96=E8=AF=91=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rd-party/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rd-party/Makefile b/3rd-party/Makefile index 33ea58d..8fdba83 100644 --- a/3rd-party/Makefile +++ b/3rd-party/Makefile @@ -5,10 +5,10 @@ export prefix ?= export PREFIX ?= targets += nlohmann +#targets += cJSON #targets += mosquitto #targets += libevent #targets += libev -#targets += cJSON targets += cpp-tbox/base \ cpp-tbox/event \ -- Gitee