|  |  |  | # $(call source-to-object,source-file-list($1))
 | 
					
						
							|  |  |  | source-to-object = $(subst .c,.o,$(filter %.c,$1)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 产生库文件相对路径,被每个库程序的module.mk文件使用.
 | 
					
						
							|  |  |  | # $(subdirectory)
 | 
					
						
							|  |  |  | subdirectory = $(patsubst $(SOURCE_DIR)/%/module.mk,%,          \
 | 
					
						
							|  |  |  |                  $(word                                         \
 | 
					
						
							|  |  |  |                    $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 产生库文件规则,被每个库程序的module.mk文件使用.
 | 
					
						
							|  |  |  | $(call make-library,library-name($1),source-file-list($2)) | 
					
						
							|  |  |  | define make-library | 
					
						
							|  |  |  |   libraries += $1 | 
					
						
							|  |  |  |   sources += $2 | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   $1: $(call source-to-object,$2) | 
					
						
							|  |  |  | 	$(QUIET)$(AR) $(ARFLAGS) $$@ $$^ $(ENULL) | 
					
						
							|  |  |  | 	@echo "$$(INFO_C)AR $$@ done";echo | 
					
						
							|  |  |  | endef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 产生依赖文件.
 | 
					
						
							|  |  |  | # $(call make-depend,source-file($1),object-file($2),depend-file($3))
 | 
					
						
							|  |  |  | define make-depend | 
					
						
							|  |  |  |   $(CC) -MM -MF $3 -MP -MT $2 $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $1 | 
					
						
							|  |  |  | endef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SOURCE_DIR := ../app | 
					
						
							|  |  |  | PRODUCT := $(MAKECMDGOALS) | 
					
						
							|  |  |  | CONFIG_FILE := $(SOURCE_DIR)/include/config.h | 
					
						
							|  |  |  | VERSION_FILE := $(SOURCE_DIR)/include/version.h | 
					
						
							|  |  |  | VERSION_LIB := version.a | 
					
						
							|  |  |  | SOFT_COMPILE_DATE := `date "+%Y.%m.%d %k:%M:%S"` | 
					
						
							|  |  |  | SOFT_VERSION := "8.0.1.0" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MV := mv -f | 
					
						
							|  |  |  | RM := rm -rf | 
					
						
							|  |  |  | SED := sed | 
					
						
							|  |  |  | TEST := test | 
					
						
							|  |  |  | MKDIR := mkdir -p | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 交叉编译设置
 | 
					
						
							|  |  |  | #DEFARCH = PC
 | 
					
						
							|  |  |  | DEFARCH = MYiR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(DEFARCH), PC) | 
					
						
							|  |  |  |   CROSS_COMPILE = | 
					
						
							|  |  |  |   CC = $(CROSS_COMPILE)gcc | 
					
						
							|  |  |  |   AR = $(CROSS_COMPILE)ar | 
					
						
							|  |  |  |   CFLAGS = -g -Wall -funwind-tables -rdynamic -DHAVE_CONFIG_H | 
					
						
							|  |  |  |   LDLIB := -lreadline -lncurses -pthread -lrt -lsqlite3 -lm -lssh -lssl -lcrypto -lz | 
					
						
							|  |  |  | else ifeq ($(DEFARCH), MYiR) | 
					
						
							|  |  |  |   CROSS_COMPILE = aarch64-buildroot-linux-gnu- | 
					
						
							|  |  |  |   CC = $(CROSS_COMPILE)gcc | 
					
						
							|  |  |  |   AR = $(CROSS_COMPILE)ar | 
					
						
							|  |  |  |   CFLAGS += -g -Wall -funwind-tables -rdynamic -DHAVE_CONFIG_H | 
					
						
							|  |  |  |   LDLIB := -L./libother -lreadline -lncurses -pthread -lrt -lsqlite3 -lm -lssh -lssl -lcrypto -lz | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 这里如果是‘@’则隐藏具体的编译命令
 | 
					
						
							|  |  |  | QUIET := @ | 
					
						
							|  |  |  | ENULL := > /dev/null | 
					
						
							|  |  |  | INFO_C := "\\033[31mInfo\\033[0m " | 
					
						
							|  |  |  | ERROR_C := "\\033[31mInfo\\033[0m " | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | modules := $(patsubst $(SOURCE_DIR)/%/module.mk,%,              \
 | 
					
						
							|  |  |  |              $(shell find $(SOURCE_DIR) -name module.mk)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 该变量仅用于产生输出目录,不做任何其他使用.			 
 | 
					
						
							|  |  |  | create-output-directories := $(shell for f in $(modules);              \
 | 
					
						
							|  |  |  |                                      do                                \
 | 
					
						
							|  |  |  |                                        $(TEST) -d $$f || $(MKDIR) $$f; \
 | 
					
						
							|  |  |  |                                      done) | 
					
						
							|  |  |  | programs := | 
					
						
							|  |  |  | sources := | 
					
						
							|  |  |  | libraries := | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | objects = $(call source-to-object,$(sources)) | 
					
						
							|  |  |  | dependencies = $(subst .o,.d,$(objects)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | include_dirs := $(SOURCE_DIR)/include ./libother/include/ | 
					
						
							|  |  |  | CPPFLAGS += $(addprefix -I ,$(include_dirs)) | 
					
						
							|  |  |  | vpath %.h $(include_dirs) | 
					
						
							|  |  |  | vpath %.c $(SOURCE_DIR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PHONY: empty | 
					
						
							|  |  |  | empty: | 
					
						
							|  |  |  | 	@echo "Please explicitly specify the Makefile target!!!Example \"make PDMonitor\"." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | include $(patsubst %,$(SOURCE_DIR)/%/module.mk,$(modules)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(VERSION_LIB): $(CONFIG_FILE) $(libraries) version.c | 
					
						
							|  |  |  | 	$(QUIET)$(RM) $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "/* WARNING: Don't modify this file anywhere!!! */" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "#ifndef _VERSION_H_" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "#define _VERSION_H_" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@echo "#define SOFT_VERSION \"$(SOFT_VERSION)\"" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "#define SOFT_COMPILE_DATE \"$(SOFT_COMPILE_DATE)\"" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@echo "" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "char* softversion_get();" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "char* softversion_date_get();" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@echo "" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "#endif" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "/* WARNING: Don't modify this file anywhere!!! */" >> $(VERSION_FILE) | 
					
						
							|  |  |  | 	@echo "COMPILE version.o" | 
					
						
							|  |  |  | 	$(QUIET)$(COMPILE.c) -o version.o version.c | 
					
						
							|  |  |  | 	$(QUIET)$(AR) $(ARFLAGS) $(VERSION_LIB) version.o $(ENULL) | 
					
						
							|  |  |  | 	@echo "$(INFO_C)AR $@ done";echo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PDMonitor: $(CONFIG_FILE) $(libraries) $(VERSION_LIB) | 
					
						
							|  |  |  |     # 使用两次$(libraries)避免库文件之间的交叉引用问题. | 
					
						
							|  |  |  | 	$(QUIET)$(LINK.o) -rdynamic $(libraries) $(libraries) $(VERSION_LIB) $(LDLIB) -o $@ | 
					
						
							|  |  |  | 	@echo "$(INFO_C)LINK $@ done";echo | 
					
						
							|  |  |  |     # $(QUIET)cp $@ //home//embed//LandPower// | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PHONY: libraries | 
					
						
							|  |  |  | libraries: $(libraries) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PHONY: clean | 
					
						
							|  |  |  | clean: | 
					
						
							|  |  |  | 	$(RM) $(modules) $(CONFIG_FILE) $(VERSION_FILE) PDMonitor $(VERSION_LIB) version.o | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifneq "$(MAKECMDGOALS)" "clean" | 
					
						
							|  |  |  |   -include $(dependencies) | 
					
						
							|  |  |  |   include config.mk | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | %.o: %.c | 
					
						
							|  |  |  | 	@echo "COMPILE $@" | 
					
						
							|  |  |  | 	$(QUIET)$(call make-depend,$<,$@,$(subst .o,.d,$@)) | 
					
						
							|  |  |  | 	$(QUIET)$(COMPILE.c) -o $@ $< |