使用了一个kbuild函数的目标 – cscope
来源:互联网 发布:法国中尉的女人 知乎 编辑:程序博客网 时间:2024/06/14 23:47
方才我们学习了史上最简单可能是kbuild中最直接的小目标 – help。这次我们来看看稍微高级那么一点点的目标 – cscope。
客官可能要着急了,这个help和cscope都还不能算是什么真正的编译目标,讲这个我不爱听啊。嗯,出门右转,点击下一个链接就是你真的爱听的了。不过呢,东西有点多,恐怕你一下子接受不了。反正我第一次写的时候都有一种写到要吐的感觉。
你想我们平时要是很久没有运动,突然让你冲刺一百米是不是会头晕眼花腿抽经?如果在奔跑前能让你做个热身,充分让身体舒展开,你的感觉会不会好很多?所以我特意增加了这篇小进阶,希望能帮助你在进入高难度之前,给你做个脑力上的热身。
找到cscope目标
打开根目录下的Makefile文件,搜索cscope关键字。你找到了么?
tags TAGS cscope gtags: FORCE $(call cmd,tags)
看来kbuild把相应的这几个tag类目标都放在了一起。
不过后面这个$(call cmd,tags)是什么鬼?原来这是makefile中定义函数的一种方式。我们来看一下手册中是怎么讲的, GNU make: call function
The call function is unique in that it can be used to create new parameterized functions. You can write a complex expression as the value of a variable, then use call to expand it with different values.The syntax of the call function is: $(call variable,param,param,…)When make expands this function, it assigns each param to temporary variables $(1), $(2), etc.
知道了这个定义,再对照刚才的命令
$(call cmd,tags)
意思就是有一个变量叫做cmd,需要在这里展开,而$(1)会被替换成tags。嗯,有点像宏定义,对不。
那我们现在要去找一个名字为cmd的变量咯~
初次遇见kbuild函数
c语言代码都是有一定的层次结构的,变量定义,函数声明都有各自的地方存放。比如定义要在源文件,而声明要在头文件。那宏定义呢? 是不是也在头文件中定义的?
makefile中也有类似的用法 – include。
在根Makefile中搜索include关键字,没几下就找到了这么一行
include scripts/Kbuild.include
是不是看着眼熟?
而在这个文件中就会发现那个叫cmd的变量了。
cmd = @$(echo-cmd) $(cmd_$(1))
我们把变量tags代入,就得到了
@$(echo-cmd) $(cmd_tags)
先不管echo-cmd,先来看cmd_tags长什么样子。
细心的童鞋可能一开始就看到了,其实它就在刚才cscope规则的上方。
# Generate tags for editors# ----------------------------------quiet_cmd_tags = GEN $@ cmd_tags = $(CONFIG_SHELL) $(srctree)/scripts/tags.sh $@
这下明白了,原来cmd就好像一个函数,而这个函数的参数就是一个回调函数~
tags.sh脚本文件
嗯,这个文件咱就不细讲了,毕竟和编译和kbuild的关系不大。总体来说就是传入什么参数,就执行相应的动作来生成需要的辅助文件。
case "$1" in "cscope") docscope ;; "gtags") dogtags ;; "tags") rm -f tags xtags ctags remove_structs=y ;; "TAGS") rm -f TAGS xtags etags remove_structs=y ;;esac
对cscope目标来讲,就是执行docscope这个动作。
cscope目标的层次结构
经过了一点小小挣扎,我们弄明白了cscope目标是如何通过kbuild系统生成的。怎么样,是不是和你相像的步骤略有不同? 是不是有学到一些些kbuild的基本结构?
这里我们来回顾一下整个cscope目标生成的步骤,我把它叫做层级结构。
Makefile <--- scripts/Kbuild.include --------------- cscope: FORCE $(call cmd,tags) Makefile --------------- cmd_tags scripts/tags.sh $@
根目录的Makefile,在Kbuild.include中定义的函数帮助下,有了一些些变换让kbuild系统多了一些标准化的辅助函数。
- 使用了一个kbuild函数的目标 – cscope
- 可能是kbuild中最直接的小目标 -- help
- Cscope的使用(实现vim函数跳转)(领略Vim + Cscope的强大魅力)
- cscope的基本使用
- vim+cscope的使用
- Cscope 的使用
- Cscope 的使用
- vim+cscope的使用
- cscope的使用
- vim+cscope的使用
- Cscope 的使用
- cscope的使用
- Cscope 的使用
- vim+cscope的使用
- vim+cscope 的使用
- CSCOPE的使用
- Cscope 的使用
- vim+cscope的使用
- 浅谈消息队列之JMS消息服务规范
- Android Studio的安装教程
- cuda8.0 出错:/usr/bin/ld: 找不到 -lGL
- 完整性和不丢失的方式处理消息 BlockingQueue类
- 字符串移位
- 使用了一个kbuild函数的目标 – cscope
- Bzoj 3123: [Sdoi2013]森林(主席树+启发式合并)
- Java源码-Float
- 递推
- 讯飞语音之语音合成
- redis 配置详解
- python爬取20000个单词音频
- C/C++中const用法小结
- Linux 系统下搭建Java开发环境