在这个例子中,当$(CC)的版本号小于4.2的时候,ccflags-y的将会等于-01的。
cc-ifversion语序所有的shell操作符:
-eq,-ne, -lt, -le, -gt, 和-ge
在这个例子中,第三个参数可以是一个文本,但是它也可以是一个扩展变量或者宏。
cc-fullversion
cc-fullversion用于需要gcc完整版本号的时候。一个典型的应用是当一个具体GCC版本号被损坏的情况。cc-fullversion比cc-version提供了一个更加具体的版本号。
例子:
#arch/powerpc/Makefile
$(Q)iftest "$(call cc-fullversion)" = "040200" ; then \
echo-n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
false; \
fi
在这个例子中,对于某一个具体的GCC版本,build会提示用户错误。
cc-cross-prefix
cc-cross-prefix用来检查包含$(CC)的路径中是否存在列表前缀中的某一个。$(CC)路径中存在的第一个列表中的前缀将被返回– 如果不存在列表中的前缀,那么就返回空。
在调用cc-cross-prefix的过程中,附加的前缀使用单个空来分开。
这个功能用在与体系架构相关的Makefile中。当试图给CROSS_COMPILE赋但是又存在多个可以选择的时,这个功能就能发挥作用了。
建议只有在交叉编译时(主机架构与目标架构不一样)才设置CROSS_COMPILE的。如果CROSS_COMPILE的已经被设置,那么就去除它原来的。
例子:
#arch/m68k/Makefile
ifneq ($(SUBARCH),$(ARCH))
ifeq ($(CROSS_COMPILE),)
CROSS_COMPILE := $(callcc-cross-prefix, m68k-linux-gnu-)
endif
endif
=== 4 主机程序支持
Kbuild支持在编译阶段使用主机上的可执行文件。
为了使用主机可执行文件需要两个步骤。
第一步是告诉kbuild存在一个主机程序。这可以通过使用hostprogs-y变量来实现。
第二步是给可执行文件增加一个明确地依赖项。这可以通过两种方法实现。通过在规则中增
加依赖项或者使用$(always)变量。
这两种可能性都在下面描述。
--- 4.1 一个简单的主机程序例子
在某些情况下,需要在build运行的主机上编译和运行一个程序。
下面的几行将告诉kbuild有一个程序bin2hex将要在build运行的主机上编译运行。
例子:
hostprogs-y:= bin2hex
kbuild假设上面例子中的bin2hex是从一个名叫bin2hex.c的c源文件编译生成的,它与Makefile处于同一个目录下面。
--- 4.2 复合主机程序
主机程序可以基于复合对象生成。
用来给主机程序定义复合对象的语法与定义内核对象的语法类。
$(<executable>-objs)变量列出了最后链接可执行文件的所有对象。
例子:
#scripts/lxdialog/Makefile
hostprogs-y := lxdialog
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-7.html
既然这样挑衅
中国传统道德的悲哀