OpenWRT开发之——BuildPackage剖析
2015-12-16 13:24
453 查看
http://my.oschina.net/hevakelcj/blog/417448
前言
在之前的博文里详细地讲述了如何在OpenWrt下建立一个软件包(package),如:[OpenWrt对C++11的支持],[OpenWrt创建软件包]。但是有个问题博主始终没有弄明白。为什么我们 make 一下,管理器就为我们从网上仓库下载软件源码,并编译打包。这个过程是怎么回事儿?还有,为什么我们在 package/<包名>/ 下的Makefile文件下的最后一行是:
?
带着这个问题,我们今天来研究一下 BuildPackage 以及展开后的Makefile全貌。
如果对Makefile的格式不太熟悉的同学,请访问我之前的博文:[Makefile学习笔记],了解Makefile的基本语法。
正文
我们还是来看看一个完整的Makefile内貌,如cpp11-demo的Makefile:?
依此,可以将上面的简化为:
?
?
玄机就在最后一行的BuildPackage,它根据上面定义的变量生成了所有上面的一切。
$(eval <text>),是将<text>作为Makefile文件中的一部分。
$(eval $(call BuildPackage,cpp11-demo)),是引用BuildPackage变量中的内容,并将内部中的$(1)替换为cpp11-demo,然后将处理后的内部作为Makefile的一部分。
1. 研究BuildPackage
BuildPackage 变量定义在 include/package.mk 文件中。?
BuidPackage的第一行就是:$(Build/IncludeOverlay),其定义:
?
比如我要更改lua这个包里面的某个变量,如果我们直接修改 package/xx/lua/Makefile 文件,总有不妥之处。因为这个文件是从网上源码上同步下来的。我们最好不要去直修改它们。若需要用户自定义某些内容,不防使用overlay。就是在 trunk/overlay/ 路径下的任意子目录下建立与包名对应的 .mk 文件,比如lua,那么就建 lua.mk。
我们在 trunk/overlay/xxx/lua.mk 文件里重新定义我们的变量或操作。
tip2
其中第9~13行:
?
tip3
?
tip4
?
其中 find_library_dependencies 定义如下:
?
) \ |
生成:
?
?
tip6
?
将 Package/$(1)/targets 或 PKG_TARGETS 中的每一项或 ipk 作为$(target),引用 $(BuildTarget/$(target))。其中:
BuildTarget/bin 定义在 include/package-bin.mk
BuildTarget/ipk 定义在 include /package-ipk.mk
具体这两个变量的内容博主暂时不去研究。其内容莫非是描述如何生成bin与ipk目标。这里留个引子,下次再研究。
如果没有定义 Package/$(1)/targets 与 PKG_TARGETS,那么上次就默认将ipk作为target,引用 BuildTarget/ipk 变量了。
tip7
?
?
2. 研究Build/DefaultTargets
如下为 Build/DefaultTargets 的定义:?
相关文章推荐
- Win7+VS2010环境下CEGUI 0.8.4编译过程详解
- Android UiAutomator编译与运行测试代码
- Educational Codeforces Round 2 B. Queries about less or equal elements
- Quicksort
- UIViewController的生命周期
- UINavigationBar Background Color
- 关于UI布局中的常见布局类型、控件、控件属性以及引入布局的说明
- UICollectionView的使用
- iOS开发~视图(UIView)与控件(UIControl)
- UIPageViewController-浅析
- EASYUI COMBOBOX 自动补齐功能
- UItable配合数组的简单用法
- SQLiteDatabase中query、insert、update、delete方法参数说明
- Android UiAutomator第一个测试工程
- sonarquer搭建问题
- easyui如何动态显示、隐藏列
- 《GK101任意波发生器》升级固件发布(版本:1.0.2build955)
- 注册juery短信,验证码 验证
- Invalid result location value/parameter
- GUI线程