lxdialog-objs := checklist.o lxdialog.o
带有.o后缀名的对象是从相应.c源文件编译而来。在上面的例子中,checklist.c用来编译生成checklist.o,lxdialog.c用来编译生成lxdialog.o。
最后,这两个.o文件链接生成最终的可执行文件lxdialog。
注意:<executable>-y的语法在主机程序中是不允许的。
--- 4.3 定义共享库
具有.so后缀名的对象被认为是共享库,共享库会被编译成为与位置无关的对象。
Kbuild提供了对共享库的支持,但是对共享库的使用应该严限制。
在下面的例子中,共享库libkconfig.so用来连接可执行文件conf。
例子:
#scripts/kconfig/Makefile
hostprogs-y := conf
conf-objs := conf.o libkconfig.so
libkconfig-objs := expr.o type.o
在makefile文件中,共享库需要相应的-obs行,在上面的例子中,共享库libkconfig有expr.o和type.o两个对象组成。
Expr.o和type.o将会编译为与位置无关的代码,并且连接成为共享库libkconfig.so。c不支持共享库。
--- 4.4 使用C的主机程序
Kbuild提供对使用C编写而成的主机程序的支持。接受它完全是为了支持kconfig,一般不建议使用。
例子:
#scripts/kconfig/Makefile
hostprogs-y := qconf
qconf-cxxobjs := qconf.o
在上面的例子中可执行文件由名叫qconf.cc的C文件组成– 使用$(qconf-cxxobjs)变量来识别。
如果qconf由.c和.cc和混合文件组成,那么需要一些额外的行来标记该行为。
例子:
#scripts/kconfig/Makefile
hostprogs-y := qconf
qconf-cxxobjs := qconf.o
qconf-objs := check.o
--- 4.5控制主机程序的编译选项
当编译一个主机程序的使用,有可能会对其设置具体的标记。编译主机程序的过程中可以使用$(HOSTCC)变量来传递$(HOSTCFLAGS)变量中指定的选项。
可以使用HOST_EXTRACFLAGS变量来设置对所有当前Makefile中创建的主机都有效的标记。
例子:
#scripts/lxdialog/Makefile
HOST_EXTRACFLAGS =-I/usr/include/ncurses
可以使用下面的命令来对单个文件设定具体的标记:
例子:
#arch/ppc64/boot/Makefile
HOSTCFLAGS_piggyback.o:= -DKERNELBASE=$(KERNELBASE)
当然可以对编译器指定附加的选项。
例子:
#scripts/kconfig/Makefile
HOSTLOADLIBES_qconf:= -L$(QTDIR)/lib
当连接qconf的时候,将会传递额外的选项"-L$(QTDIR)/lib"给编译器。
--- 4.6主机程序的最终建立
Kbuild只有当主机程序被引用为一个先决条件时才会最终建立它们。
这可以通过两种方法实现:
(1)将先决条件明确地在特殊规则中列出
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-8.html
那中国的现代级和旅沪级旅海级岂不更老
全国军民应团结一致
这样的言论就应当受到处理