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

📄 1011.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<br>
<br>
unexport obj-y # 编绎成内核的文件集
<br>
unexport obj-m # 编绎成模块的文件集
<br>
unexport obj-n #
<br>
unexport obj- #
<br>
unexport export-objs # 需进行版本处理的文件集
<br>
unexport subdir-y # 编绎内核所需进入的子目录
<br>
unexport subdir-m # 编绎模块所需进入的子目录
<br>
unexport subdir-n
<br>
unexport subdir-
<br>
<br>
#
<br>
# Get things started.
<br>
#
<br>
first_rule: sub_dirs
<br>
$(MAKE) all_targets
<br>
<br>
# 在内核编绎子目录中过滤出可以作为模块的子目录。
<br>
both-m := $(filter $(mod-subdirs), $(subdir-y))
<br>
SUB_DIRS := $(subdir-y)
<br>
# 求出总模块子目录
<br>
MOD_SUB_DIRS := $(sort $(subdir-m) $(both-m))
<br>
# 求出总子目录
<br>
ALL_SUB_DIRS := $(sort $(subdir-y) $(subdir-m) $(subdir-n) $(subdir-))
<br>
<br>
<br>
#
<br>
# Common rules
<br>
#
<br>
# 将c文件编绎成汇编文件的规则,$@为目标对象。
<br>
%.s: %.c
<br>
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -S $&lt; -o $@
<br>
# 将c文件生成预处理文件的规则。
<br>
%.i: %.c
<br>
$(CPP) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) $&lt; &gt; $@
<br>
# 将c文件编绎成目标文件的规则,$&lt;为第一个所依赖的对象;
br&gt;
#
<br>
在目标文件的目录下生成flags文件,strip删除多余的空格,subst将逗号替换成冒号
<br>
<br>
%.o: %.c
<br>
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -c -o $@ $&lt;
<br>
@ ( 
<br>
echo 'ifeq ($(strip $(subst $(comma),:,$(CFLAGS) $(EXTRA_CFLAGS)
<br>
$(CFLAGS_$@))),$$(strip $$(subst $$(comma),:,$$(CFLAGS) $$(EXTRA_CFLAGS)
<br>
$$(CFLAGS_$@))))' ; 
<br>
echo 'FILES_FLAGS_UP_TO_DATE += $@' ; 
<br>
echo 'endif' 
<br>
) &gt; $(dir $@)/.$(notdir $@).flags
<br>
# 汇编文件生成目标文件的规则。
<br>
%.o: %.s
<br>
$(AS) $(AFLAGS) $(EXTRA_CFLAGS) -o $@ $&lt;
<br>
<br>
# Old makefiles define their own rules for compiling .S files,
<br>
# but these standard rules are available for any Makefile that
<br>
# wants to use them. Our plan is to incrementally convert all
<br>
# the Makefiles to these standard rules. -- rmk, mec
<br>
<br>
ifdef USE_STANDARD_AS_RULE
<br>
# 汇编文件生成预处理文件的标准规则。
<br>
%.s: %.S
<br>
$(CPP) $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$@) $&lt; &gt; $@
<br>
# 汇编文件生成目标文件的标准规则。
<br>
%.o: %.S
<br>
$(CC) $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$@) -c -o $@ $&lt;
<br>
<br>
endif
<br>
# c文件生成调试列表文件的规则,$*扩展为目标的主文件名。
<br>
%.lst: %.c
<br>
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -g -c -o $*.o $&lt;
<br>
$(TOPDIR)/scripts/makelst $* $(TOPDIR) $(OBJDUMP)
<br>
#
<br>
#
<br>
#
<br>
all_targets: $(O_TARGET) $(L_TARGET)
<br>
<br>
#
<br>
# Rule to compile a set of .o files into one .o file
<br>
#
<br>
ifdef O_TARGET
<br>
$(O_TARGET): $(obj-y)
<br>
rm -f $@
<br>
# $^扩展为全部依赖对象,如果obj-y为空就生成一个同名空的库文件。
<br>
ifneq "$(strip $(obj-y))" ""
<br>
$(LD) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(obj-y), $^)
<br>
else
<br>
$(AR) rcs $@
<br>
endif
<br>
# 生成flags文件的shell语句。
<br>
@ ( 
<br>
echo 'ifeq ($(strip $(subst $(comma),:,$(EXTRA_LDFLAGS)
<br>
$(obj-y))),$$(strip $$(subst $$(comma),:,$$(EXTRA_LDFLAGS) $$(obj-y))))' ;
<br>

<br>
echo 'FILES_FLAGS_UP_TO_DATE += $@' ; 
<br>
echo 'endif' 
<br>
) &gt; $(dir $@)/.$(notdir $@).flags
<br>
endif # O_TARGET
<br>
<br>
#
<br>
# Rule to compile a set of .o files into one .a file
<br>
#
<br>
# 将obj-y组合成库L_TARGET的方法。
<br>
ifdef L_TARGET
<br>
$(L_TARGET): $(obj-y)
<br>
rm -f $@
<br>
$(AR) $(EXTRA_ARFLAGS) rcs $@ $(obj-y)
<br>
@ ( 
<br>
echo 'ifeq ($(strip $(subst $(comma),:,$(EXTRA_ARFLAGS)
<br>
$(obj-y))),$$(strip $$(subst $$(comma),:,$$(EXTRA_ARFLAGS) $$(obj-y))))' ;
<br>

<br>
echo 'FILES_FLAGS_UP_TO_DATE += $@' ; 
<br>
echo 'endif' 
<br>
) &gt; $(dir $@)/.$(notdir $@).flags
<br>
endif
<br>
<br>
<br>
#
<br>
# This make dependencies quickly
<br>
#
<br>
# wildcard为查找目录中的文件名的宏。
<br>
fastdep: dummy
<br>
$(TOPDIR)/scripts/mkdep $(wildcard *.[chS] local.h.master) &gt; .depend
<br>
ifdef ALL_SUB_DIRS
<br>
#
<br>
将ALL_SUB_DIRS中的目录名加上前缀_sfdep_作为目标运行子make,并将ALL_SUB_DIRS
<br>
通过
<br>
# 变量_FASTDEP_ALL_SUB_DIRS传递给子make。
<br>
$(MAKE) $(patsubst %,_sfdep_%,$(ALL_SUB_DIRS))
<br>
_FASTDEP_ALL_SUB_DIRS="$(ALL_SUB_DIRS)"
<br>
endif
<br>
<br>
ifdef _FASTDEP_ALL_SUB_DIRS
<br>
#
<br>
与上一段相对应,定义子目录目标,并将目标名还原为目录名,进入该子目录make。
<br>
$(patsubst %,_sfdep_%,$(_FASTDEP_ALL_SUB_DIRS)):
<br>
$(MAKE) -C $(patsubst _sfdep_%,%,$@) fastdep
<br>
endif
<br>
<br>
<br>
#
<br>
# A rule to make subdirectories
<br>
#
<br>
# 下面2段完成内核编绎子目录中的make。
<br>
subdir-list = $(sort $(patsubst %,_subdir_%,$(SUB_DIRS)))
<br>
sub_dirs: dummy $(subdir-list)
<br>
<br>
ifdef SUB_DIRS
<br>
$(subdir-list) : dummy
<br>
$(MAKE) -C $(patsubst _subdir_%,%,$@)
<br>
endif
<br>
<br>
#
<br>
# A rule to make modules
<br>
#
<br>
# 求出有效的模块文件表。
<br>
ALL_MOBJS = $(filter-out $(obj-y), $(obj-m))
<br>
ifneq "$(strip $(ALL_MOBJS))" ""
<br>
# 取主目录TOPDIR到当前目录的路径。
<br>
PDWN=$(shell $(CONFIG_SHELL) $(TOPDIR)/scripts/pathdown.sh)
<br>
endif
<br>
<br>
unexport MOD_DIRS
<br>
MOD_DIRS := $(MOD_SUB_DIRS) $(MOD_IN_SUB_DIRS)
<br>
# 编绎模块时,进入模块子目录的方法。
<br>
ifneq "$(strip $(MOD_DIRS))" ""
<br>
.PHONY: $(patsubst %,_modsubdir_%,$(MOD_DIRS))
<br>
$(patsubst %,_modsubdir_%,$(MOD_DIRS)) : dummy
<br>
$(MAKE) -C $(patsubst _modsubdir_%,%,$@) modules
<br>
# 安装模块时,进入模块子目录的方法。
<br>
.PHONY: $(patsubst %,_modinst_%,$(MOD_DIRS))
<br>
$(patsubst %,_modinst_%,$(MOD_DIRS)) : dummy
<br>
$(MAKE) -C $(patsubst _modinst_%,%,$@) modules_install
<br>
endif
<br>
<br>
# make modules 的入口。
<br>
.PHONY: modules
<br>
modules: $(ALL_MOBJS) dummy 
<br>
$(patsubst %,_modsubdir_%,$(MOD_DIRS))
<br>
<br>
.PHONY: _modinst__
<br>
# 拷贝模块的过程。
<br>
_modinst__: dummy
<br>
ifneq "$(strip $(ALL_MOBJS))" ""
<br>
mkdir -p $(MODLIB)/kernel/$(PDWN)
<br>
cp $(ALL_MOBJS) $(MODLIB)/kernel/$(PDWN)
<br>
endif
<br>
<br>
# make modules_install 的入口,进入子目录安装。
<br>
.PHONY: modules_install
<br>
modules_install: _modinst__ 
<br>
$(patsubst %,_modinst_%,$(MOD_DIRS))
<br>

⌨️ 快捷键说明

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