LITE-utils的仓库: git@gitlab.alibaba-inc.com:iot-middleware/LITE-utils.gitmaster分支的build-rules目录复制得到构建系统的最新副本LITE-utils中体验构建系统的工作方式和观察工作过程| 命令 | 解释 |
|---|---|
make distclean |
清除一切构建过程产生的中间文件, 使当前目录仿佛和刚刚clone下来一样 |
make [all] |
使用默认的平台配置文件开始编译 |
make reconfig |
弹出多平台选择菜单, 用户可按数字键选择, 然后根据相应的硬件平台配置开始编译 |
make config |
显示当前被选择的平台配置文件 |
make help |
打印帮助文本 |
make <directory> |
单独编译被指定的目录, 或者叫构建单元 |
| 命令 | 解释 |
|---|---|
make test |
运行指定的测试集程序, 统计显示测试例的通过率和源代码的覆盖率 |
make doc |
扫描源码目录中以Doxygen格式或者Markdown格式编写的注释, 在html目录产生帮助文档 |
make repo-list |
列出当前工程引用的外部组件和它们的云端仓库地址 |
make repo-update |
对所有引用到的外部组件, 用云端仓库更新本地仓库 |
LITE-utils$ tree -A -L 1
.
+-- build-rules # 构建系统核心
+-- example
+-- external
+-- makefile # 工程的makefile
+-- packages
+-- project.mk # 工程设置文件
+-- src
+-- testsuites
以
LITE-utils为例, 对整个构建过程需要知道的只有如上三个部分:
| 组成部分 | 说明 |
|---|---|
project.mk |
本工程的目录排布, 工程名称, 版本信息等, 可选 |
makefile |
本工程的makefile, 基于GNU Make, 通常只含有极少的内容, 指定编译的范围, 必选 |
build-rules |
构建系统核心, 指定编译的规则, 不需要关注 |
可以从一个简单的makefile样例看起
1 sinclude project.mk
2 sinclude $(CONFIG_TPL)
3
4 SUBDIRS += \
5 external/cut \
6 src \
7 example \
8 testsuites \
9
10 include $(RULE_DIR)/rules.mk
GNU Make的简化系统, 所以工作过程的起点仍然是顶层的makefileproject.mk, 如果当前工程的目录排布和默认的不一样, 则用当前设置, 可选.config文件, 这个文件其实是构建系统运行时所有输入的集合, 也称为硬件平台配置文件, 可选SUBDIRS变量, 这个变量指定了编译的范围, 必选CFLAGS或者LDFLAGS等变量, 顶层makefile的变量会被应用到每个构建单元的编译和链接, 可选.../rules.mk文件, 开始进入构建系统核心, 必选, 这又可以细分为如下过程.config文件, 也就是所谓的$(CONFIG_TPL)iot.mk的目录, 如果不希望用iot.mk作为每个单元的编译片段文件, 在project.mk中设置MAKE_SEGMENT变量即可$(SUBDIRS)变量从前往后逐个编译每个构建单元make doc: 扫描源码目录中以Doxygen格式或者Markdown格式编写的注释, 在html目录产生帮助文档
LITE-utils $ make doc
...
...
Patching output file 15/16
Patching output file 16/16
lookup cache used 256/65536 hits=882 misses=258
finished...
make repo-list: 列出当前工程引用的外部组件和它们的云端仓库地址
LITE-utils $ make repo-list
[external/log] git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git
以上输出表示在构建单元
external/log, 引用了云端仓库位于git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git的外部组件LITE-log
make repo-update: 将所有引用的外部组件用云端仓库更新本地仓库
LITE-utils $ make repo-update
[ LITE-log.git ] <= : git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git :: master
+ cd /home/edward/srcs/iot-middleware/LITE-utils/packages
+ rm -rf LITE-log.git
+ git clone -q --bare -b master --single-branch git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git LITE-log.git
+ rm -rf LITE-log.git/hooks/
+ mkdir -p LITE-log.git/hooks/
+ touch LITE-log.git/hooks/.gitkeep
+ touch LITE-log.git/refs/heads/.gitkeep LITE-log.git/refs/tags/.gitkeep
+ rm -rf /home/edward/srcs/iot-middleware/LITE-utils.pkgs/LITE-log
+ cd /home/edward/srcs/iot-middleware/LITE-utils
+ set +x
以上输出表示从
git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git拉取最新的云端仓库, 更新到本地仓库packages/LITE-log.git