makefile 语法_makefile define用法_nis makefile 语法(9)

电脑杂谈  发布时间:2017-04-11 03:08:44  来源:网络整理

例子:

#drivers/pci/Makefile

hostprogs-y := gen-devlist

$(obj)/devlist.h: $(src)/pci.ids$(obj)/gen-devlist

( cd $(obj); ./gen-devlist ) < $<

只有当$(obj)/gen-devlist更新后,目标$(obj)/devlist.h才会被编译。注意特殊规则中对主机程序的引用必须使用前缀$(obj)。

(2)使用$(always)变量

当没有合适的特殊规则,并且在kbuild进入makefile的时候就要生成主机程序,那么就应该使用$(always)变量。

例子:

#scripts/lxdialog/Makefile

hostprogs-y := lxdialog

always := $(hostprogs-y)

这将告诉kbuild编译lxdialog,即使它没有在任何规则中引用。

--- 4.7 使用 hostprogs-$(CONFIG_FOO)

Kbuild文件中的一种典型形式是这样的:

例子:

#scripts/Makefile

hostprogs-$(CONFIG_KALLSYMS)= kallsyms

Kbuild知道‘y’是将文件编译进内核,而‘m’是将文件作为模块。所以如果一个文件的配置标志等于‘m’,kbuild还是会将它编译成二进制代码。换句话说,Kbuild处理hostprogs-m完全和处理hostprogs-y的方法一样。不过在没有CONFIG标志的时候,只建议使用hostprogs-y。

=== 5 Kbuild的清除机制

“make clean”命令删除大多数内核编译目录的目标树中生成的文件。要删除的文件包括所

编译过程中生成的文件,比如主机程序。Kbuild知道(hostprogs-y), $(hostprogs-m), $(always),

$(extra-y) 和$(targets)这些列表中存在的目标,这些目标都会在执行"make clean"命令后删除。

匹配"*.[oas]", "*.ko"模式的文件加上一些由kbuild生成的附加文件,在"makeclean"执行时都

会从内核源码树中删除。

在kbuild makefiles中可以使用(clean-files)变量来指定一些额外要删除的文件。

例子:

#drivers/pci/Makefile

clean-files := devlist.h classlist.h

当执行"make clean"后,"devlist.h classlist.h"这两个文件也将会被删除。如果没有给出文件

的绝对地址(以‘/’开头),那么kbuild就会假设该文件与makefile在同一目录下。

可以使用下面的方法删除一个多层次目录:

例子:

#scripts/package/Makefile

clean-dirs := $(objtree)/debian/

上面的例子中将会删除目录debian,以及它包含的所有子目录。如果没有给出目录

的绝对地址(以‘/’开头),那么kbuild就会假设该目录与makefile在同一目录下。

如果makefile中存在类"obj-* := dir/"的语句,那么kbuild就必须进入到指定的子目录中去,

但是在于体系架构相关的makefiles中kbuild的机制不够全面,这种情况需要明确指出来。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-9.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 赵宇龙
      赵宇龙

      加油吧

    • 李紫扬
      李紫扬

      而且我认为现在等他们宣布再处理的方式已经过时

    热点图片
    拼命载入中...