通用makefile是如何炼成的(XI)--最后的完结篇,envsetup.sh
来源:互联网 发布:西恩潘 知乎 编辑:程序博客网 时间:2024/05/21 19:20
长话短说,没有envsetup.sh, 当你需要单独编译一个模块,或者做点其他工作时,你总是会感到为什么命令行总是那么麻烦!有了envsetup.sh, 对命令行人生有新的感悟,原来我也可以做一个简单的“菜鸟”。
这个envsetup.sh是从android的代码中考过来的,做了很大的简化。google他奶奶的太细心和繁琐了,这里用不着
可用通过usage命令查询,
目前仅支持
genmk, 在当前目录下自动生成一个module.mk, 也可以指定名字
mm 单独编译当前目录下的module.mk
mmm 编译指定的module.mk, 可以同时指定多个
choosecombo 指定product,platform, debug/release版本
choosecombo支持命令自动补全,不喜欢google的给出一大串选择题的方式,感觉不合命令行的风格。在不久前的一个blog中还详细谈了如果写一个shell 命令自动补全的脚本,(
linux shell中的命令自动补全(compgen complete)与 命令行参数解析
cygwin的etc 目录下有个bash_completion文件,里面定义两个主要的函数,但我们只要会使用_get_comp_words_by_ref 这个函数就可以了。这个函数会将原来输入的部分命令重新组装成我们需要的样子,比如 原生cygwin状态下,输入 x=t 会被拆解为三个单词 x ,=, t, 在这个函数中通过-n指定不希望被拆分的符号,在这里就是“=”, 就可以重新组装为x=t。(要查看cygwin遇到哪些字符会将单词拆分,可以echo 变量 COMP_WORDBREAKS)
简单示例_get_comp_words_by_ref -n "=" cur
则cur的结果不是t, 而是x=t
有了这个函数,我们只要将原来引用COMP_CWORD-->cwords, COMP_WORDS-->words 就可以了。
function __HUB_completion() {local cur prev words cword_get_comp_words_by_ref -n = cur prev words cwordcase $cword in0) ;;*) eval __${words[0]}_completion ;;esac}
function __choosecombo_completion(){local cur_get_comp_words_by_ref -n = cur COMPREPLY=()case "${cur}" in--buildtype=*)local options="debug release"COMPREPLY=( $(compgen -W "${options}" -- ${cur#--buildtype=}) );;
最后,说一下如何添加产品和添加编译平台
上面是makefile的部分目录结构,如果需要添加编译平台信息,可以仿照x86-linux.mk, 添加到platforms目录下。编译时通过TARGET_PLATFORM中指定编译平台,也就是引用x86-linux.mk 还是其他的xx.mk.。 在build/config.mk中,可以配置默认的编译平台。
同样,我们的makefile也支持编译多个项目,可以仿照Sameple,Sample2,建立产品信息。你也可以直接将相关文件挂载到products目录,做成匿名的产品。编译时通过TARGET_PRODUCT指定导入哪个产品信息,如果是匿名产品,则令TARGET_PRODUCT="."即可。 同样,在build/config.mk中,可以配置默认的编译产品。
另外,支持在源代码模块中,添加修改上面的产品和平台信息, 分别通过product-specs.mk,platform-specs.mk载入,具体可以查看这两个文件的定义和config.mk。这个一般主要用于添加模块独有的特性,可以做很方便的产品差异控制。其他的也就没什么要特别说的了。
over,年底前总算了有个了结了。
- 通用makefile是如何炼成的(XI)--最后的完结篇,envsetup.sh
- 通用makefile是如何炼成的(II)
- 通用makefile是如何炼成的(III)
- 通用makefile是如何炼成的(IV)
- 通用makefile是如何炼成的(V)
- 通用makefile是如何炼成的(VI)
- 通用makefile是如何炼成的(VII)
- 通用makefile是如何炼成的(VIII)
- 通用makefile是如何炼成的(I)
- 通用makefile是如何炼成的(Ⅸ)整体框架
- 通用makefile是如何炼成的(X)—— 导入单元测试
- vmlinux是如何炼成的--kernel makefile
- vmlinux是如何炼成的--kernel makefile
- envsetup.sh的常用命令
- 程序员是这样炼成的(20)-写在最后
- build/envsetup.sh的简介
- makefile 必知必会以及Makefile是怎样炼成的
- 好口才是如何炼成的!
- MyEclipse中调试Tomcat
- java 类对象引用关系
- android入门:zxing学习笔记
- oracle 解锁及密码过期问题
- J2EE——JDBC
- 通用makefile是如何炼成的(XI)--最后的完结篇,envsetup.sh
- 电力系统找工作经验分享--送与电气的师弟师妹们
- Android_常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
- 哪位大侠能帮忙把这个关于pdf解析的代码优化下,有报酬
- 《大话设计模式》 -- 14.抽象工厂模式
- JDK环境变量设置详解
- IE对http1.1 不支持201状态码
- C++的64位整数[原]by 赤兔
- 《汇编语言》王爽版重点摘要-----第五章