makefile学习

gcc工具链要用一致的工具链才行,比如在180上执行的程序 直接用gcc就可以了,
单板上的话,要用/usr/KIDE/host/ide/tools_chain/arm/armeb_eabi_gcc4.8.2_glibc2.18.0_be8/bin/armeb-unknown-linux-gnueabi-目录下的gcc工具
clean:
  rm 中间文件

.PHONY:clean   //假的目标,就是为了避免Makefile里面的clean和Makefile之外有重名的clean;

自动化变量:
  1、$@ 表示一个规则中的目标。当我们的一个规则有多个目标,$@所指的是其中任何造成命名被运行的目标
  2、$^ 表示规则中所有的先决条件
  3、$< 表示规则中第一个先决条件
 
其中,$在Makefile中有特殊的含义。因此如果要采用@echo 输出$ ,则必须用两个连着的$。还有,$@对于shell
也有特殊的意思,我们需要在$$@之前在加一个脱字符“\”,即@echo "\$$@= $@"
.PHONY:clean
CC=gcc
RM=rm

EXE=simple.exe
OBJS=main.o foo.o

simple:$(OBJS)
    $(CC) -o $(EXE) $(OBJS)
main.o:main.c
    $(CC) -o $@ -c $^
foo.o:foo.c
    $(CC) -o foo.o -c foo.c   
    //更改成$(CC) -o $@ -c $^  $@指的是规则中的目标foo.o,$^ 指的是规则中的先决条件foo.c
clean:
    $(RM) $(EXE) $(OBJS)

4种赋值操作
= 是最基本的赋值
:= 是覆盖之前的值   make只进行一次扫描和替换。
?= 是如果没有被赋值过就赋予等号后面的值 如果已经定义了就不在改变其值
+= 是添加等号后面的值

函数:
$(wildcard *.c)   wildcard 是通配符函数,找到我们所需的函数,就是找到所有*.c函数。
$(addprefix prefix,names.....) 用来给字符串中每个字串前加上一个前缀,注意是每个字串
$(addsufix sufix,names.....)   增加后缀
$(patsubst pattern,replacement,text)  替换字符串。
    mixed=foo.c bar.c main.o
    objects:=$(patsubst %.c,%.o,$(mixed))   这样就把mixed中的.c都换成.o文件了。

$(basename name )   取前缀函数,

gcc -MM 是列出依赖文件; 这样可以看出源程序所包含的头文件
sed工具  字符串处理工具。 gcc -MM foo.c | sed's,\(.*\)\.o[:]*,objs/\1.o:/g'
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值