#target PC or Board Default is haisi platform
CURDIR := $(shell pwd)
TG = Communication
# CURDIR 和 TG是定义的变量
# 引用变量采用"$(变量名)"
# Makefile中的变量只能是字符串类型
# Makefile中变量有四种赋值方式:
# 1,简单赋值( := ) 编程语言中常规理解的赋值方式,只对当前语句的变量有效
# 2,递归赋值( = ) 赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响
# 3,条件赋值( ?= ) 如果变量未定义,则使用符号中的值定义变量。如果该变量已经赋值,则该赋值语句无效。
# 4,追加赋值( += ) 原变量用空格隔开的方式追加一个新值
#target
OUTOBJ = out/obj
BIN = mapa3_$(TG)
MAKE = make
MKDIR = mkdir
RM = rm
# O0 O1 表示在不影响编译速率的前提下尽可能的优化程序的大小和运行速率。
# O2 表示在牺牲部分编译速率的前提下 支持配置优化参数的优化 尽可能的提高运行速率。
# O3 表示 采取多项量算法 提高程序的运行速率(他不惜增大程序的大小)
# Os 和O3一样只不过他不会为了提高程序运行速率增大程序的大小。
#-I 头文件的目录
INCLUDES += -I$(CURDIR)/ -O3
INCLUDES += -I/usr/local/libevent_haisi/include -O3
CC=arm-himix200-linux-gcc
CXX=arm-himix200-linux-g++
# CC=gcc
# CXX=g++
#-L 库文件的目录
#CFLAGS 编译用
CFLAGS += $(INCLUDES)
CFLAGS += -L./
CFLAGS += -L/usr/local/libevent_haisi/lib
#LDFLAGS 链接选项
LDFLAGS += -lm -lpthread -ldl -lstdc++
LDFLAGS += -Wl,-Bstatic -Wl,-Bdynamic -lpthread -lm -lstdc++ -ldl -lpthread
#链接库
LDFLAGS += -levent_core_a
SUBDIRS = $(shell find $(CURDIR) -maxdepth 3 -type d)
CSRCS = $(foreach dir,$(SUBDIRS),$(wildcard $(dir)/*.c))
CXXSRCS = $(foreach dir,$(SUBDIRS),$(wildcard $(dir)/*.cpp))
COBJS = $(patsubst %.c, %.o, $(CSRCS))
CXXOBJS = $(patsubst %.cpp, %.o, $(CXXSRCS))
COBJS_TEST = $(addprefix $(OUTOBJ)/, $(notdir $(patsubst %.c,%.o, $(CSRCS))))
CXXOBJS_TEST = $(addprefix $(OUTOBJ)/, $(notdir $(patsubst %.cpp,%.o, $(CXXSRCS))))
MAKEDEPEND = $(CC) -MM -MT
CDEF = $(CSRCS:.c=.d)
CXXDEF = $(CXXSRCS:.cpp=.d)
# 规则:用于说明如何生成一个或多个目标文件
# 规则的格式:
# targets:prerequisites
# command
# 目标: 依赖
# 命令
# +++++命令需要以[TAB]键开始++++
all:$(BIN)
$(CDEF) : %.d : %.c
$(MAKEDEPEND) $($<:.c=.o) $< $(INCLUDES) > $@
$(CXXDEF) : %.d : %.cpp
$(MAKEDEPEND) $($<:.cpp=.o) $< $(INCLUDES) > $@
depend:
$(RM) $(CDEF)
$(RM) $(CXXDEF)
$(MAKE) $(CDEF)
$(MAKE) $(CXXDEF)
$(COBJS) : %.o: %.c
$(CC) -c $< -o $@ $(CFLAGS)
$(CXXOBJS) : %.o: %.cpp
$(CXX) -c $< -o $@ $(CFLAGS)
$(BIN) : $(COBJS) $(CXXOBJS) #$(OUTOBJ)
@echo "->>>>>>>> compile " $@
@echo $(CSRCS)
@echo $(CXXSRCS)
@echo "->>>>>>>> compile " $@
$(CXX) -O3 -Os -o $(BIN) $(COBJS) $(CXXOBJS) $(CFLAGS) $(LDFLAGS)
$(OUTOBJ):
$(MKDIR) -p $(OUTOBJ)
#.PHONY修饰的目标就是只有规则没有依赖
.PHONY:clean cleanall
clean:
$(RM) $(BIN) $(COBJS) $(CXXOBJS)
cleanall:
$(RM) $(CDEF) $(CXXDEF)
$(RM) $(BIN) $(COBJS) $(CXXOBJS)
运行
1、make clean,清理一下
2、make 执行命令
makefile输出定义的变量值
在编译规则中,加入输出语句即可,用$(变量)引用变量,再用@echo输出