⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 196570.html

📁 Makefile解读,简单介绍框架 知识
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<br>	$(LD)&nbsp;$(EXTRA_LDFLAGS)&nbsp;-r&nbsp;-o&nbsp;$@&nbsp;$(filter&nbsp;$(obj-y),&nbsp;$^)
<br>&nbsp;&nbsp;&nbsp;&nbsp;else
<br>	$(AR)&nbsp;rcs&nbsp;$@
<br>&nbsp;&nbsp;&nbsp;&nbsp;endif
<br>#&nbsp;生成flags文件的shell语句。
<br>	@&nbsp;(&nbsp;\
<br>	&nbsp;&nbsp;&nbsp;&nbsp;echo&amp;s;'''ifeq&nbsp;($(strip&nbsp;$(subst&nbsp;$(comma),:,$(EXTRA_LDFLAGS)
<br>$(obj-y))),$$(strip&nbsp;$$(subst&nbsp;$$(comma),:,$$(EXTRA_LDFLAGS)&nbsp;$$(obj-y)))4;'''&nbsp;;
<br>\
<br>	&nbsp;&nbsp;&nbsp;&nbsp;echobp''''FILES_FLAGS_UP_TO_DATE&nbsp;+=&amp;np$''''&nbsp;;&nbsp;\
<br>	&nbsp;&nbsp;&nbsp;&nbsp;echnsp;''edf''''&nbsp;\
<br>	)&nbsp;&gt;&nbsp;$(dir&nbsp;$@)/.$(notdir&nbsp;$@).flags
<br>endif&nbsp;#&nbsp;O_TARGET
<br>
<br>#
<br>#&nbsp;Rule&nbsp;to&nbsp;compile&nbsp;a&nbsp;set&nbsp;of&nbsp;.o&nbsp;files&nbsp;into&nbsp;one&nbsp;.a&nbsp;file
<br>#
<br>#&nbsp;将obj-y组合成库L_TARGET的方法。
<br>ifdef&nbsp;L_TARGET
<br>$(L_TARGET):&nbsp;$(obj-y)
<br>	rm&nbsp;-f&nbsp;$@
<br>	$(AR)&nbsp;$(EXTRA_ARFLAGS)&nbsp;rcs&nbsp;$@&nbsp;$(obj-y)
<br>	@&nbsp;(&nbsp;\
<br>	&nbsp;&nbsp;&nbsp;&nbsp;eons;''''ifeq&nbsp;($(strip&nbsp;$(subst&nbsp;$(comma),:,$(EXTRA_ARFLAGS)
<br>$(obj-y))),$$(strip&nbsp;$$(subst&nbsp;$$(comma),:,$$(EXTRA_ARFLAGS)&nbsp;$$(obj-y))&amp;1&amp;4;''''&nbsp;;
<br>\
<br>	&nbsp;&nbsp;&nbsp;&nbsp;h&amp;bp;''''FILES_FLAGS_UP_TO_DATE&nbsp;&amp;bp$@''''&nbsp;;&nbsp;\
<br>	&nbsp;&nbsp;&nbsp;&amp;nbs;h&amp;bp;'''edif''''&nbsp;\
<br>	)&nbsp;&gt;&nbsp;$(dir&nbsp;$@)/.$(notdir&nbsp;$@).flags
<br>endif
<br>
<br>
<br>#
<br>#&nbsp;This&nbsp;make&nbsp;dependencies&nbsp;quickly
<br>#
<br>#&nbsp;wildcard为查找目录中的文件名的宏。
<br>fastdep:&nbsp;dummy&nbsp;
<br>	$(TOPDIR)/scripts/mkdep&nbsp;$(wildcard&nbsp;*.[chS]&nbsp;local.h.master)&nbsp;&gt;&nbsp;.depend
<br>ifdef&nbsp;ALL_SUB_DIRS
<br>#
<br>将ALL_SUB_DIRS中的目录名加上前缀_sfdep_作为目标运行子make,并将ALL_SUB_DIRS
<br>通过
<br>#&nbsp;变量_FASTDEP_ALL_SUB_DIRS传递给子make。
<br>	$(MAKE)&nbsp;$(patsubst&nbsp;%,_sfdep_%,$(ALL_SUB_DIRS))
<br>_FASTDEP_ALL_SUB_DIRS="$(ALL_SUB_DIRS)"
<br>endif
<br>
<br>ifdef&nbsp;_FASTDEP_ALL_SUB_DIRS
<br>#
<br>与上一段相对应,定义子目录目标,并将目标名还原为目录名,进入该子目录make。
<br>$(patsubst&nbsp;%,_sfdep_%,$(_FASTDEP_ALL_SUB_DIRS)):
<br>	$(MAKE)&nbsp;-C&nbsp;$(patsubst&nbsp;_sfdep_%,%,$@)&nbsp;fastdep
<br>endif
<br>
<br>	
<br>#
<br>#&nbsp;A&nbsp;rule&nbsp;to&nbsp;make&nbsp;subdirectories
<br>#
<br>#&nbsp;下面2段完成内核编绎子目录中的make。
<br>subdir-list&nbsp;=&nbsp;$(sort&nbsp;$(patsubst&nbsp;%,_subdir_%,$(SUB_DIRS)))
<br>sub_dirs:&nbsp;dummy&nbsp;$(subdir-list)
<br>
<br>ifdef&nbsp;SUB_DIRS
<br>$(subdir-list)&nbsp;:&nbsp;dummy
<br>	$(MAKE)&nbsp;-C&nbsp;$(patsubst&nbsp;_subdir_%,%,$@)
<br>endif
<br>
<br>#
<br>#&nbsp;A&nbsp;rule&nbsp;to&nbsp;make&nbsp;modules
<br>#
<br>#&nbsp;求出有效的模块文件表。
<br>ALL_MOBJS&nbsp;=&nbsp;$(filter-out&nbsp;$(obj-y),&nbsp;$(obj-m))
<br>ifneq&nbsp;"$(strip&nbsp;$(ALL_MOBJS))"&nbsp;""
<br>#&nbsp;取主目录TOPDIR到当前目录的路径。
<br>PDWN=$(shell&nbsp;$(CONFIG_SHELL)&nbsp;$(TOPDIR)/scripts/pathdown.sh)
<br>endif
<br>
<br>unexport&nbsp;MOD_DIRS
<br>MOD_DIRS&nbsp;:=&nbsp;$(MOD_SUB_DIRS)&nbsp;$(MOD_IN_SUB_DIRS)
<br>#&nbsp;编绎模块时,进入模块子目录的方法。
<br>ifneq&nbsp;"$(strip&nbsp;$(MOD_DIRS))"&nbsp;""
<br>.PHONY:&nbsp;$(patsubst&nbsp;%,_modsubdir_%,$(MOD_DIRS))
<br>$(patsubst&nbsp;%,_modsubdir_%,$(MOD_DIRS))&nbsp;:&nbsp;dummy
<br>	$(MAKE)&nbsp;-C&nbsp;$(patsubst&nbsp;_modsubdir_%,%,$@)&nbsp;modules
<br>#&nbsp;安装模块时,进入模块子目录的方法。
<br>.PHONY:&nbsp;$(patsubst&nbsp;%,_modinst_%,$(MOD_DIRS))
<br>$(patsubst&nbsp;%,_modinst_%,$(MOD_DIRS))&nbsp;:&nbsp;dummy
<br>	$(MAKE)&nbsp;-C&nbsp;$(patsubst&nbsp;_modinst_%,%,$@)&nbsp;modules_install
<br>endif
<br>
<br>#&nbsp;make&nbsp;modules&nbsp;的入口。
<br>.PHONY:&nbsp;modules
<br>modules:&nbsp;$(ALL_MOBJS)&nbsp;dummy&nbsp;\
<br>	&nbsp;$(patsubst&nbsp;%,_modsubdir_%,$(MOD_DIRS))
<br>
<br>.PHONY:&nbsp;_modinst__
<br>#&nbsp;拷贝模块的过程。
<br>_modinst__:&nbsp;dummy
<br>ifneq&nbsp;"$(strip&nbsp;$(ALL_MOBJS))"&nbsp;""
<br>	mkdir&nbsp;-p&nbsp;$(MODLIB)/kernel/$(PDWN)
<br>	cp&nbsp;$(ALL_MOBJS)&nbsp;$(MODLIB)/kernel/$(PDWN)
<br>endif
<br>
<br>#&nbsp;make&nbsp;modules_install&nbsp;的入口,进入子目录安装。
<br>.PHONY:&nbsp;modules_install
<br>modules_install:&nbsp;_modinst__&nbsp;\
<br>	&nbsp;$(patsubst&nbsp;%,_modinst_%,$(MOD_DIRS))
<br>
<br>#
<br>#&nbsp;A&nbsp;rule&nbsp;to&nbsp;do&nbsp;nothing
<br>#
<br>dummy:
<br>
<br>#
<br>#&nbsp;This&nbsp;is&nbsp;useful&nbsp;for&nbsp;testing
<br>#
<br>script:
<br>	$(SCRIPT)
<br>
<br>#
<br>#&nbsp;This&nbsp;sets&nbsp;version&nbsp;suffixes&nbsp;on&nbsp;exported&nbsp;symbols
<br>#&nbsp;Separate&nbsp;the&nbsp;object&nbsp;into&nbsp;"normal"&nbsp;objects&nbsp;and&nbsp;"exporting"&nbsp;objects
<br>#&nbsp;Exporting&nbsp;objects&nbsp;are:&nbsp;all&nbsp;objects&nbsp;that&nbsp;define&nbsp;symbol&nbsp;tables
<br>#
<br>ifdef&nbsp;CONFIG_MODULES
<br>#&nbsp;list-multi列出那些由多个文件复合而成的模块;
<br>#&nbsp;从编绎文件表和模块文件表中过滤出复合模块名。
<br>multi-used	:=&nbsp;$(filter&nbsp;$(list-multi),&nbsp;$(obj-y)&nbsp;$(obj-m))
<br>#&nbsp;取复合模块的构成表。
<br>multi-objs	:=&nbsp;$(foreach&nbsp;m,&nbsp;$(multi-used),&nbsp;$($(basename&nbsp;$(m))-objs))
<br>#&nbsp;求出需进行编译的总模块表。
<br>active-objs	:=&nbsp;$(sort&nbsp;$(multi-objs)&nbsp;$(obj-y)&nbsp;$(obj-m))
<br>
<br>ifdef&nbsp;CONFIG_MODVERSIONS
<br>ifneq&nbsp;"$(strip&nbsp;$(export-objs))"&nbsp;""&nbsp;
<br>#&nbsp;如果有需要进行版本化的文件。
<br>MODINCL&nbsp;=&nbsp;$(TOPDIR)/include/linux/modules
<br>
<br>#&nbsp;The&nbsp;-w&nbsp;option&nbsp;(enable&nbsp;warnings)&nbsp;for&nbsp;genksyms&nbsp;will&nbsp;return&nbsp;here&nbsp;in&nbsp;2.1
<br>#&nbsp;So&nbsp;where&nbsp;has&nbsp;it&nbsp;gone?
<br>#
<br>#&nbsp;Added&nbsp;the&nbsp;SMP&nbsp;separator&nbsp;to&nbsp;stop&nbsp;module&nbsp;accidents&nbsp;between&nbsp;uniprocessor
<br>#&nbsp;and&nbsp;SMP&nbsp;Intel&nbsp;boxes&nbsp;-&nbsp;AC&nbsp;-&nbsp;from&nbsp;bits&nbsp;by&nbsp;Michael&nbsp;Chastain
<br>#
<br>
<br>ifdef&nbsp;CONFIG_SMP
<br>	genksyms_smp_prefix&nbsp;:=&nbsp;-p&nbsp;smp_
<br>else
<br>	genksyms_smp_prefix&nbsp;:=&nbsp;
<br>endif
<br>#&nbsp;从源文件计算版本文件的规则。
<br>$(MODINCL)/%.ver:&nbsp;%.c
<br>
@if&nbsp;[&nbsp;!&nbsp;-r&nbsp;$(MODINCL)/$*.stamp&nbsp;-o&nbsp;$(MODINCL)/$*.stamp&nbsp;-ot&nbsp;$&lt;&nbsp;];&nbsp;then&nbsp;\
&lt;&gt;
co&nbsp;''''$(CC)&nbsp;$(CFLAGS)&nbsp;-E&nbsp;-D__GENKSY_&amp;bp;$&lt;'''';&nbsp;\
r eho&nbsp;''''|&nbsp;$(GENKSYMS)&nbsp;$(genksyms_smp_prefix)&nbsp;-k
<br>$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)&nbsp;t&amp;bp;$@.tmp'''';&nbsp;\
<br>		$(CC)&nbsp;$(CFLAGS)&nbsp;-E&nbsp;-D__GENKSYMS__&nbsp;$&lt;&nbsp;\
<br>		|&nbsp;$(GENKSYMS)&nbsp;$(genksyms_smp_prefix)&nbsp;-k
<br>$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)&nbsp;&gt;&nbsp;$@.tmp;&nbsp;\
<br>
if&nbsp;[&nbsp;-r&nbsp;$@&nbsp;]&nbsp;&amp;&amp;&nbsp;cmp&nbsp;-s&nbsp;$@&nbsp;$@.tmp;&nbsp;then&nbsp;echo&nbsp;$@&nbsp;is&nbsp;unchanged;&nbsp;rm&nbsp;-f
<br>$@.tmp;&nbsp;\
<br>		else&nbsp;echo&nbsp;mv&nbsp;$@.tmp&nbsp;$@;&nbsp;mv&nbsp;-f&nbsp;$@.tmp&nbsp;$@;&nbsp;fi;&nbsp;\

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -