例子:
#arch/i386/Makefile
cflags-y = $(callcc-option,-march=pentium-mmx,-march=i586)
在上面的例子中,如果支持$(CC),那么cflags-y将会被赋予-march=pentium-mmx选项的,否则就赋予-march=i586选项的。对于cc-option,第二个参数是可选的。如果第二参数被省略了并且第一个选项不被支持,那么cflags-y将会被置为空。
注意:cc-option使用KBUILD_CFLAGS作为$(CC)的选项。
cc-option-yn
cc-option-yn用来检查gcc是否支持一个给定的选项。如果支持就返回‘y’,否则就返回‘n’。
例子:
#arch/ppc/Makefile
biarch:= $(call cc-option-yn, -m32)
aflags-$(biarch) = -a32
cflags-$(biarch) = -m32
在上面的例子中,如果$(CC)支持-m32选项,那么$(biarch)的将会被置为y。当$(biarch)的等于‘y’,那么扩展的变量$(aflags-y)和$(cflags-y)将会分别等于-a32和-m32.
注意:cc-option-yn使用KBUILD_CFLAGS作为$(CC)的选项。
cc-option-align
版本号大于3.0的gcc为了指定函数以及循环的对齐方式,改变了选项的类型。当为对齐选项使用前缀时,$(cc-option-align)将选择合适的前缀:
gcc< 3.00
cc-option-align= -malign
gcc>= 3.00
cc-option-align= -falign
例子:
KBUILD_CFLAGS= $(cc-option-align)-functions=4
在上面的例子中,选项-falign-functions=4用于gcc >=3.00的情况。对于gcc < 3.00的情况,使用 -malign-functions=4 选项.
注意:cc-option-align使用KBUILD_CFLAGS作为$(CC) 的选项
cc-version
cc-version返回一个用数字表示的$(CC)编译器版本。数字版本的式是<major><minor>,这两部分都是数字。比如gcc 3.41将会返回0341.
当一个特定的$(CC)版本在某个地方是错误的,cc-version就会非常有用。比如尽管cc-version选项会被gcc给接受,但是-mregparm=3在某些gcc版本中还是不会成立。
例子:
#arch/i386/Makefile
cflags-y = $(shell \
if [ $(call cc-version) -ge 0300 ] ;then \
echo "-mregparm=3"; fi ;)
在上面的例子中,-mregparm=3只有当gcc版本大于等于3.0的时候才成立。
cc-ifversion
cc-ifversion用来测试$(CC)的版本,并且当版本表达式的为真的时候,它的等于最后一个参数的。
例子:
#fs/reiserfs/Makefile
ccflags-y := $(call cc-ifversion, -lt,0402, -O1)
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-6.html
想搞台独的人
美选择退出