Makefile编写&运行

37 篇文章 0 订阅
#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输出

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值