Chinaunix首页 | 论坛 | 博客
  • 博客访问: 334972
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 476
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-01 19:08
个人简介

Android/Linux/音频/驱动

文章分类

全部博文(41)

文章存档

2017年(21)

2016年(20)

我的朋友

分类: Android平台

2017-03-02 08:25:38

Android Makefile常用函数简介(不定期更新)

Qidi 2017.02.20 Markdown & Haroopad


word N, TEXT 
作用:取出TEXT中第N个单词 
示例:$(word 3, aaa bbb ccc) 结果为 ccc 
出处:main.mk:26:#TOP := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))

words TEXT 
作用:返回TEXT中的单词数目 
示例:$(words aaa bbb ccc) 结果为 3 
出处:main.mk:26:#TOP := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))

dir FILENAME 
作用:返回FILENAME文件的目录 
示例:$(dir core/main.mk) 结果为 core/ 
出处:main.mk:26:#TOP := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))

patsubst FROM, TO, FILELIST 
作用:将FILELIST中符合模式(pattern)FROM的文件名或字符串替换为TO模式那样的文件名或字符串 
示例:$(patsubst %c, %.o, aaa.c bbb.c) 结果是 aaa.o bbb.o 
出处:main.mk:27:#TOP := $(patsubst %/, %, $(TOP))

lastword TEXT 
作用:返回TEXT文本中的最后1个单词。相当于$(word $(words TEXT), TEXT) 
示例:$(lastword aaa bbb ccc) 结果为 ccc 
出处:clear_cars.mk:377:MAKEFILE_LIST := $(lastword $(MAKEFILE_LIST))

filter PATERN, TEXT 
作用:取出TEXT中符合PATERN模式的字符串 
示例:$(filter a%, aaa abc bbb ccc) 结果为 aaa abc 
出处:envsetup.mk:252:ifneq ($(filter  dax%, $(TARGET_PRODUCT)), )

filter-out PATTERN, TEXT 
作用:取出TEXT中除了符合PATTERN模式的其余字符串 
示例:$(filter-out aaa, aaa bbb ccc) 结果为 bbb ccc 
出处: Android.mk:52:LOCAL_SRC_FILES := $(filter-out DolbySoundTile.javaDolbySoundController.java, $(LOCAL_SRC_FILES))

strip TEXT 
作用:去掉TEXT中的空格 
示例:$(strip aaa bbb ccc) 结果为 aaabbbccc 
出处:dolby-product.mk:49:ifneq ($(strip $(DOLBY_MONO_SPEAKER)), )

findstring TARGET, TEXT 
作用:在TEXT字符串中查找并返回TARGET字符串,若不存在则返回空 
示例:$(findstring aaa, aaa bbb ccc) 结果为 aaa 
出处:Android.mk:14:ifeq ($(findstring arm, $(TARGET_ARCH)), arm)

error TEXT 
作用:打印内容为TEXT的错误消息,并结束makefile运行 
示例:$(error “Fatal error occured.”) 
出处: Android.mk:18:$(error “Unsupported architecture for DAP1: $(TARGET_ARCH)”)


【补充说明】

很多时候我们还会看到有all-makefiles-underall-c-files-underall-cpp-files-underall-java-files-underfind-subdir-filesmy-dirinherit-productinherit-device等函数的调用。举个例子:LOCAL_SRC_FILES := $(call all-java-files-under, src)这个调用就是要查找出src/目录下的所有java源文件,并将这些源文件的名字添加到LOCAL_SRC_FILES这个变量中。

这些makefile函数其实都是在build/core/*.mk文件中定义的,通常以define关键字开头。如果我们想知道它们的作用是什么,可以直接去makefile文件中查看。在build/core/目录下使用命令grep -rn ^define\ all-java-files-under就可以轻松查找到相应命令的定义。

比如all-java-files-under就是在build/core/definitions.mk文件中定义的。定义内容如下:

  1. ##########################################################
  2. ## Find all of the java files under the named directories.
  3. ## Meant to be used like:
  4. ## SRC_FILES := $(call all-java-files-under, src tests)
  5. ##########################################################
  6. define all-java-files-under
  7. $(call all-named-files-under, *.java, $(1))
  8. endef



阅读(2646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~