You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.5 KiB
Makefile

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# $(call source-to-object,source-file-list($1))
source-to-object = $(subst .c,.o,$(filter %.c,$1))
# 产生库文件相对路å¾?被æ¯<C3A6>个库ç¨åº<C3A5>çš„module.mkæ‡ä»¶ä½¿ç”¨.
# $(subdirectory)
subdirectory = $(patsubst $(SOURCE_DIR)/%/module.mk,%, \
$(word \
$(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
# 产生库文件规åˆ?被æ¯<C3A6>个库ç¨åº<C3A5>çš„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
# 产生ä¾<C3A4>èµæ‡ä»¶.
# $(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
MQTT_DIR := ../mqtt
PRODUCT := $(MAKECMDGOALS)
CONFIG_FILE := $(SOURCE_DIR)/include/config.h
VERSION_FILE := $(SOURCE_DIR)/include/version.h
VERSION_LIB := version.a
DATE_STRING := `date "+%Y.%m.%d %k:%M:%S"`
VERSION_STRING := "3.2.1.7"
MV := mv -f
RM := rm -rf
SED := sed
TEST := test
MKDIR := mkdir -p
# 交å<C2A4>‰ç¼è¯è®¾ç½®
#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
else ifeq ($(DEFARCH), MYiR)
CFLAGS += -g -Wall -funwind-tables -rdynamic -DHAVE_CONFIG_H
endif
LDLIB := -lreadline -lncurses -pthread -lm -ldl -lrt -lpaho-mqtt3as -lssl -lcrypto -lsqlite3
# 这里如果是‘@’则éš<C3A9>è—<C3A8>具体的ç¼è¯å½ä»?
#QUIET := @
ENULL := > /dev/null
INFO_C := "\\33[32mInfo\\33[0m "
ERROR_C := "\\33[31mInfo\\33[0m "
modules := $(patsubst $(SOURCE_DIR)/%/module.mk,%, \
$(shell find $(SOURCE_DIR) -name module.mk))
# 该å<C2A5>˜é‡<C3A9>仅用于产生输出ç®å½•,ä¸<C3A4>å<EFBFBD>šä»»ä½•å…¶ä»ä½¿ç”¨.
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 $(MQTT_DIR)/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 VERSION \"$(VERSION_STRING)\"" >> $(VERSION_FILE)
@echo "#define DATE \"$(DATE_STRING)\"" >> $(VERSION_FILE)
@echo "" >> $(VERSION_FILE)
@echo "char* version_get();" >> $(VERSION_FILE)
@echo "char* version_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)é<>¿å…<C3A5>库æ‡ä»¶ä¹é—´çš„交å<C2A4>‰å¼•用问题.
$(QUIET)$(LINK.o) -rdynamic $(libraries) $(VERSION_LIB) $(LDLIB) -o $@
@echo "$(INFO_C)LINK $@ done";echo
# $(QUIET)cp $@ //home//embed//LandPower//
CableMQTT: $(CONFIG_FILE) $(libraries) $(VERSION_LIB)
# 使用两次$(libraries)é<>¿å…<C3A5>库æ‡ä»¶ä¹é—´çš„交å<C2A4>‰å¼•用问题.
$(QUIET)$(LINK.o) -rdynamic $(libraries) $(libraries) $(VERSION_LIB) $(LDLIB) -L $(MQTT_DIR)/lib -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 CableMQTT $(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 $@ $<