linux-2.6.24/scripts/Kbuild.include

这篇博客探讨了Linux内核构建系统中`scripts/Kbuild.include`文件的一些核心符号定义,如目标文件名处理和临时文件创建。还介绍了如何检查文件的权限,如读、写、执行权限,以及文件类型。博客提到了`define`用于定义Makefile函数,`filechk`用于验证文件更新状态,并展示了如何通过`cmp`命令比较文件内容。虽然详细解析过程较复杂,但文章提供了一些关键概念和操作。
摘要由CSDN通过智能技术生成

一些常用符号的定义,解析了一段,觉得太费劲,还是等遇到再一个个解析吧。

comma   := ,
squote  := '
empty   :=
space   := $(empty) $(empty)

将目标文件名前加"."

dot-target = $(dir $@).$(notdir $@)

将文件名变为.$(文件名).d之后,将其中的",“换为”_",主要用来生成临时文件名。

depfile = $(subst $(comma),_,$(dot-target).d)

将目标去掉路径和后缀名。

basetarget = $(basename $(notdir $@))

将单引号加上转义字符,subst为替换,将第三参数中的第一参数替换为第二参数。$1为调用者传入的第一个参数

escsq = $(subst $(squote),'\$(squote)',$1)

define用来定义makefile中的函数,fileckh用来检查对应的文件是否是最新的。
$ @目标文件,$ ^所有的依赖文件,$ <第一个依赖文件
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

cmp为比较两个文件内容

define filechk
	#如果过程中出现错误,立即退出
	$(Q)set -e;				\
	echo '  CHK     $@';			\
	mkdir -p $(dir $@);			\
	#这一行不太理解,感觉像是,把依赖项的内容作为输入交给filechk_$(1)处理之后,输出到$@.tmp中。
	$(filechk_$(1)) < $< > $@.tmp;		\
	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
		rm -f $@.tmp;			\
	else					\
		echo '  UPD     $@';		\
		mv -f $@.tmp $@;		\
	fi
endef

获取列表中第一个找到的C编译器,2>&1为错误输出也等效为标准输出,而标准输出已经重定向到null,也就是不显示所有内容,只注重结果。如果程序执行成功,则返回找到的第一个C编译器

cc-cross-prefix =  \
	$(word 1, $(foreach c,$(1),                                   \
		$(shell set -e;                                       \
		if (which $(strip $(c))$(CC)) > /dev/null 2>&1 ; then \
			echo $(c);                                    \
		fi)))

# output directory for tests below
TMPOUT := $(if $(KBUILD_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值