Makefile了解Android.mk

Maven、ANT、Gradle构建工具
Makefile 构建工具,只需通过make一句命令就可以构建一个可执行程序
为什么要写Makefile文件?
1.当项目非常庞大时,让构建过程,自动化,简单
2.依赖文件比目标更新,会重建目标文件

gcc编译工具,类似于javac
gcc -c a.c把a.c编译成目标文件a.o

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

#myapp目标(最终目标,第一行是最终目标)
#:后的文件,这些都是依赖
#命令TAB键开头,不能用四个空格代替,如何由依赖文件得到目标
#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
#依赖:main.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.o:divi.c
#   gcc -c divi.c

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

#step 3
#wildcard所有当前目录下.c源文件
SOURCES=$(wildcard *.c)
#把.c后缀,替换成.o后缀
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中间文件
#伪目标保证了在当前文件夹有clen文件不会报错
.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)
#@echo 不加@执行make test时会输出echo 。。。加上@只会输出后面的结果而不输出echo
test:
    @echo $(SOURCES)
    @echo $(OBJECTS)
    @echo $(str2)
    @echo $(str4)
    @echo $(str5)
    @echo $(myfun_ret)
    @echo $(call myfun,30,40)



plus.c
minus.c
multi.c
divi.c
main.c

.c -> .o目标文件
.o -> 打包myapp,可执行文件

直接make,构建的是终极目标
构建非终极目标,make main.o

调用my-dir函数,返回Android.mk文件所在的目录
LOCAL_PATH := $(call my-dir) 放在第一行,地址当前所在目录
include file Makefile可以引入其他的Makefile文件
include $(CLEAR_VARS) 编译模块时,清空LOCAL_MODULE等参数
LOCAL_MODULE 模块名称
LOCAL_SRC_FILES 编译需要的源文件
LOCAL_C_INCLUDES 需要的头文件
LOCAL_SHARED_LIBRARIES 编译需要的动态库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值