1) 所有的先决文件(both*.c and *.h)
2) 在所有先决文件中使用的CONFIG_选项
3) 编译目标中使用的命令行
因此,如果你改变了$(CC)的某个选项,那么所有相关的文件将会被重新编译。
--- 3.10 特殊规则
当kbuild机制没有提供必要的支持时,特殊规则就起作用了。一个典型的例子是在生成过程中生成的头文件。
另一个例子是与具体架构相关的Makefiles需要特殊规则来准备启动映像。
特殊规则的书写和正常的Make规则一样。
Kbuild不在Makefile所在的目录中执行,所以所有的特殊规则需要提供相对路径给先决文件和目标文件。
有两个用来定义特殊规则:
$(src)
$(src)是一个用来指向makfile所在目录的相对路径。必须使用$(src) 变量来引用src源码树中的文件。
$(obj)
$(obj)是一个用来指向目标文件保存位置的相对目录。必须使用$(obj)变量来引用生成的文件。
例子:
#drivers/scsi/Makefile
$(obj)/53c8xx_d.h: $(src)/53c7,8xx.scr$(src)/script_asm.pl
$(CPP)-DCHIP=810 - < $< | ... $(src)/script_asm.pl
这是一个遵循正常make语法的特殊规则。
目标文件依赖于两个先决文件。对目标文件的引用使用$(obj)作为前缀,而对先决文件的引用则使用$(src)(因为它们不是生成文件)。
--- 3.11 $(CC) 支持的函数
内核可以使用几个不同版本的$(CC)来编译,每个版本都支持一个唯一的特征和选项集合。Kbuild提供对$(CC)的无效选项的检查。$(CC)是通常的gcc编译器,但是其它的编译器也是可以的。
as-option
as-option用来检查$(CC)是否 – 当用来编译汇编(*.S)文件 – 支持给定的选项。当不支持第一个选项的时候,第二个可选选项可能会被指定。
例子:
#arch/sh/Makefile
cflags-y = $(callas-option,-Wa$(comma)-isa=$(isa-y),)
在上面的例子中,当支持$(CC)的时候,cflags-y将等于选项-Wa$(comma)-isa=$(isa-y)的。第二个参数是可选的,当不支持第一个选项,并且第二个选项有给出的时候,它就会被使用。
ld-option
ld-option用来在链接目标文件时检查是否支持给定的选项。当不支持第一个选项的时候,一个可选的第二选项可能会被支持。
例子:
#arch/i386/kernel/Makefile
vsyscall-flags = $(call ld-option,-Wl$(comma)--hash-style=sysv)
在上面的例子中,如果支持$(CC),那么vsyscall-flags就会被赋予-Wl$(comma)--hash-style=sysv选项的。第二个参数是可选的,当不支持第一个选项,并且第二个选项有给出的时候,它就会被使用。
as-instr
as-instr用来检查汇编器是否报告了一个特定的指令,然后输入选项1或者选项2。C测试指令支持C转义。
注意:as-instr-option使用KBUILD_AFLAGS作为$(AS)的选项。
cc-option
cc-option用来检查$(CC)是否支持一个给定的选项,而不是支持使用一个可选的第二选项。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-5.html
靠边站宋
不行了不行了我受不了新表情的诱惑了还有四天我就升级
吗哦