#CROSS_COMPILE=/opt/zxw/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/
#CC=$(CROSS_COMPILE)/arm-linux-gnueabihf-gcc
CC=gcc #编译工具
#CFLAGS = -O -lm -fpermissive #lib文件也链接上,之前需要连接静态库
#LIBS = -lpthread -lstdc++ -pthread -w -lrt -lke_mqtt_lib_static -lm -lanalysis -lpaho-mqtt3c
#LIBS = -lpthread -lstdc++ -pthread -w -lrt -lm -lanalysis -lpaho-mqtt3c
#LIBS = -L/usr/lib -lpthread -pthread -w -lrt -lanalysis -lm -lpaho-mqtt3c -L/lib
#LIBS = -L./ -L../lib -L../../lib -lanalysis -lpthread -lstdc++ -pthread -w -lrt -lm -lpaho-mqtt3c -lsg
#COMMON_INCLUDE = -I../include -I./
PROG = ./app_test
#生成的目标 当前目录下
SRC_CXX = ./hk_camera.c ./crc.c ./main.c
#需要编译的文件
OBJS = $(SRC_CXX:.c=.o)
#目标.o文件的生成依赖于目标.c文件
.PHONY:all
#对这句话的解释
#.PHONY: clean
# means the word "clean" doesn't represent a file name in this Makefile;
# means the Makefile has nothing to do with a file called "clean" in the same directory.
#all目标都表示如果你调用它,make将会构build完成所需的所有东西 。 这通常是一个虚拟目标,它不会创build任何文件,而仅仅依赖于其他文件
#带@符,这条命令仅执行,不会打印在缓冲区
#如果#在行首的话,makefile不会做任何动作。
#但是如果#号以tab开头,makefile虽然不会执行,但是会回显到终端上。
#用@:在以tab开头的情况和#在行首的情况是一样的。
#@$(CC) -o $(PROG) $(CFLAGS) -O2 -Wall $(LIBS) $(OBJS) libke_mqtt_lib_static.a
all:$(OBJS)
@$(CC) -o $(PROG) -O2 -Wall $(OBJS)
@echo "Build done $(PROG)...OK"
@echo "****************************"
@echo "* *"
@echo "* app_test start run *"
@echo "* *"
@echo "****************************"
@$(PROG)
#-Wno-write-strings:
#会忽略掉C++ char * 转const char *的警告,这样并不会很安全;
#@$(CC) -o $@ -c $(CFLAGS) -Wno-write-strings $(COMMON_INCLUDE) $(LIBS) $<
#下边的第一命令是上面命令的简化版,类似于gcc -o main.o -c main.c,$@目标文件,$<第一个依赖的文件
$(OBJS):%.o:%.c
@$(CC) -o $@ -c $<
@echo "Compling $<...OK"
clean:
@rm -rf $(OBJS) $(PROG)
@echo "Clean done!"