| 在下面这个简化的 makefile 代码的帮助下,了解如何在 Linux 内核中实现递归 make: # In top Makefilevmlinux: scripts/link-vmlinux.sh $(vmlinux-deps)                +$(call if_changed,link-vmlinux) # Variable assignmentsvmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN) $(KBUILD_VMLINUX_LIBS) export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y2) $(drivers-y) $(net-y) $(virt-y)export KBUILD_VMLINUX_LIBS := $(libs-y1)export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds init-y          := init/drivers-y       := drivers/ sound/ firmware/net-y           := net/libs-y          := lib/core-y          := usr/virt-y          := virt/ # Transform to corresponding built-in.ainit-y          := $(patsubst %/, %/built-in.a, $(init-y))core-y          := $(patsubst %/, %/built-in.a, $(core-y))drivers-y       := $(patsubst %/, %/built-in.a, $(drivers-y))net-y           := $(patsubst %/, %/built-in.a, $(net-y))libs-y1         := $(patsubst %/, %/lib.a, $(libs-y))libs-y2         := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))virt-y          := $(patsubst %/, %/built-in.a, $(virt-y)) # Setup the dependency. vmlinux-deps are all intermediate objects, vmlinux-dirs# are phony targets, so every time comes to this rule, the recipe of vmlinux-dirs# will be executed. Refer "4.6 Phony Targets" of `info make`$(sort $(vmlinux-deps)): $(vmlinux-dirs) ; # Variable vmlinux-dirs is the directory part of each built-in.avmlinux-dirs    := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m)                      $(core-y) $(core-m) $(drivers-y) $(drivers-m)                      $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y))) # The entry of recursive make$(vmlinux-dirs):                $(Q)$(MAKE) $(build)=$@ need-builtin=1
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |