【问题标题】:Explain the Makefile generated by mkmakefile (Linux kernel, buildroot, busybox)讲解mkmakefile生成的Makefile(Linux内核、buildroot、busybox)
【发布时间】:2012-07-31 12:30:01
【问题描述】:

脚本 mkmakefile 在 builddir 中生成以下 Makefile。

如果调用,所有目标都将传递给 srcdir Makefile。

谁能解释为什么?魔法在哪里?

lastword = $(word $(words $(1)),$(1)) makedir := $(dir $(call lastword,\$(MAKEFILE_LIST))) MAKEARGS := -C path_to_srcdir MAKEARGS += O=$(if $(patsubst /%,,$(makedir)),$(CURDIR)/)$(patsubst %/,%,$(makedir)) MAKEFLAGS += --no-print-directory .PHONY:全部 $(MAKECMDGOALS) all := $(filter-out all Makefile,$(MAKECMDGOALS)) 全部: $(制作) $(制作) $(全部) 生成文件:; $(全部):全部 @: %/: 全部 @:

【问题讨论】:

    标签: linux linux-kernel makefile gnu-make buildroot


    【解决方案1】:

    让我们分解一下。首先,使用all 作为目标和变量名是令人讨厌的,这是一个新手编码器或代码生成器会做的事情。让我们重命名变量all_targs 并假设我们通过make Makefile foo bar baz 调用。如果我们刮掉一些与问题无关的部分,我们会得到

    MAKEARGS := -C path_to_srcdir
    
    .PHONY: all $(MAKECMDGOALS)
    
    all_targs := $(filter-out all Makefile,$(MAKECMDGOALS)) # foo bar baz
    
    all:
        $(MAKE) $(MAKEARGS) $(all_targs)
    
    Makefile:;
    
    $(all_targs): all
        @: # do nothing
    

    所以我们什么都不做 Makefileall_targsfoo bar baz,对于这三个目标我们什么都不做,但我们需要 allall 的规则运行命令

    make -C path_to_srcdir foo bar baz
    

    (还有一些曲折,但这是它的核心。)

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 2019-10-04
      • 2018-10-28
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多