自学Makefile

#三要素
#目标,依赖,命令

#myapp目标 (最终目标,第一行是最终目标)
#:后的文件都是依赖

#step 1
#myapp:main.o plus.o minus.o multi.o divi.o
#    gcc main.o plus.o minus.o multi.o divi.o -o myapp

#目标:main.o
#依赖:mian.c
#命令:gcc -c main.c
#main.o:main.c
#    gcc -c main.c
#plus.o:plus.c
#    gcc -c plus.c
#minus.o:minus.c
#    gcc -c minus.c
#multi.o:multi.c
#    gcc -c multi.c
#divi.0:divi.c
#    gcc -c divi.c

#step2
#变量
#OBJECTS=main.o plus.o minus.o multi.o divi.o

#step 3
#$(wildcard *.c) 用来获取工作目录下的所有 .c源文件
#wildcard : 扩展通配符
SOURCES=$(wildcard *.c)

#把.c后缀,替换成.o后缀
#notdir : 去除路径
#patsubst :替换通配符
OBJECTS=$(patsubst %.c,%.o,$(SOURCES))

myapp:$(OBJECTS)
#自动化变量 $^ 表示所有依赖,$@表示目标
    gcc $^ -o $@

#通配符
#main.o:main.c
%.o:%.c
#gcc -c main.c -o main.o
    gcc -c $^ -o $@

#没有依赖
#clean清除所有的.o中间文件
#伪目标
.PHONY:clean

clean:
    rm -f *.o
    rm -f myapp
#递归展开式
#可以引用还没有定义的变量,展开是引用时展开
str2=$(str1)
str1=hello

#直接展开式
#必须引用定义好的变量,定义之后就会展开
str3 := android
str4 := $(str3)
#拼接字符串
str5 := $(str1) world
#变量的值追加
str5 += hello
#自定义函数
myfun=$2 $1
#变量等于函数的执行结构
myfun_ret=$(call myfun,20,10)

test:
    @echo $(SOURCES)
    @echo $(OBJECTS)
    @echo $(str2)
    @echo $(str4)
    @echo $(str5)
    @echo $(myfun_ret)
    @echo $(call myfun,30,40)


你可能感兴趣的:(Android)