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

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

在这个例子中,当$(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

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

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