<求助>MAKEFILE中LIBS和INCLUDES的编写

作者&投稿:乜黛 (若有异议请与网页底部的电邮联系)
有谁知道Makefile中的LIBS += $(BOARDLIBS) 是什么意思~

LIBS += $(BOARDLIBS)
将BOARDLIBS 变量值,追加(要理解这个追加哦)到LIBS变量下;
依这两个变量名的意思来看,你的编译工程用到了相应板(比如说专门给s3c2440的库)
希望我的解答对你有帮助

Linux内核的配置系统由三个部分组成,分别是:Makefile:分布在 Linux 内核源代码中的 Makefile,定义 Linux 内核的编译规则; 配置文件(config.in):给用户提供配置选择的功能; 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。所以,在本文中,我们只对 Makefile 和配置文件进行讨论。另外,凡是涉及到与具体 CPU 体系结构相关的内容,我们都以 ARM 为例,这样不仅可以将讨论的问题明确化,而且对内容本身不产生影响。2. Makefile2.1 Makefile 概述Makefile 的作用是根据配置的情况,构造出需要编译的源文件列表,然后分别编译,并把目标代码链接到一起,最终形成 Linux 内核二进制文件。由于 Linux 内核源代码是按照树形结构组织的,所以 Makefile 也被分布在目录树中。Linux 内核中的 Makefile 以及与 Makefile 直接相关的文件有:Makefile:顶层 Makefile,是整个内核配置、编译的总体控制文件。 .config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果(如 make config)。 arch/*/Makefile:位于各种 CPU 体系目录下的 Makefile,如 arch/arm/Makefile,是针对特定平台的 Makefile。 各个子目录下的 Makefile:比如 drivers/Makefile,负责所在子目录下源代码的管理。 Rules.make:规则文件,被所有的 Makefile 使用。 用户通过 make config 配置后,产生了 .config。顶层 Makefile 读入 .config 中的配置选择。顶层 Makefile 有两个主要的任务:产生 vmlinux 文件和内核模块(module)。为了达到此目的,顶层 Makefile 递归的进入到内核的各个子目录中,分别调用位于这些子目录中的 Makefile。至于到底进入哪些子目录,取决于内核的配置。在顶层 Makefile 中,有一句:include arch/$(ARCH)/Makefile,包含了特定 CPU 体系结构下的 Makefile,这个 Makefile 中包含了平台相关的信息。位于各个子目录下的 Makefile 同样也根据 .config 给出的配置信息,构造出当前配置下需要的源文件列表,并在文件的最后有 include $(TOPDIR)/Rules.make。Rules.make 文件起着非常重要的作用,它定义了所有 Makefile 共用的编译规则。比如,如果需要将本目录下所有的 c 程序编译成汇编代码,需要在 Makefile 中有以下的编译规则:%.s: %.c$(CC) $(CFLAGS) -S $< -o $@有很多子目录下都有同样的要求,就需要在各自的 Makefile 中包含此编译规则,这会比较麻烦。而 Linux 内核中则把此类的编译规则统一放置到 Rules.make 中,并在各自的 Makefile 中包含进了 Rules.make(include Rules.make),这样就避免了在多个 Makefile 中重复同样的规则。对于上面的例子,在 Rules.make 中对应的规则为:%.s: %.c$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F)) $(CFLAGS_$@) -S $< -o $@2.2 Makefile 中的变量顶层 Makefile 定义并向环境中输出了许多变量,为各个子目录下的 Makefile 传递一些信息。有些变量,比如 SUBDIRS,不仅在顶层 Makefile 中定义并且赋初值,而且在 arch/*/Makefile 还作了扩充。常用的变量有以下几类:1) 版本信息版本信息有:VERSION,PATCHLEVEL, SUBLEVEL, EXTRAVERSION,KERNELRELEASE。版本信息定义了当前内核的版本,比如 VERSION=2,PATCHLEVEL=4,SUBLEVEL=18,EXATAVERSION=-rmk7,它们共同构成内核的发行版本KERNELRELEASE:2.4.18-rmk72) CPU 体系结构:ARCH在顶层 Makefile 的开头,用 ARCH 定义目标 CPU 的体系结构,比如 ARCH:=arm 等。许多子目录的 Makefile 中,要根据 ARCH 的定义选择编译源文件的列表。3) 路径信息:TOPDIR, SUBDIRSTOPDIR 定义了 Linux 内核源代码所在的根目录。例如,各个子目录下的 Makefile 通过 $(TOPDIR)/Rules.make 就可以找到 Rules.make 的位置。SUBDIRS 定义了一个目录列表,在编译内核或模块时,顶层 Makefile 就是根据 SUBDIRS 来决定进入哪些子目录。SUBDIRS 的值取决于内核的配置,在顶层 Makefile 中 SUBDIRS 赋值为 kernel drivers mm fs net ipc lib;根据内核的配置情况,在 arch/*/Makefile 中扩充了 SUBDIRS 的值,参见4)中的例子。4) 内核组成信息:HEAD, CORE_FILES, NETWORKS, DRIVERS, LIBSLinux 内核文件 vmlinux 是由以下规则产生的:vmlinux: $(CONFIGURATION) init/main.o init/version.o linuxsubdirs$(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o --start-group $(CORE_FILES) $(DRIVERS) $(NETWORKS) $(LIBS) --end-group -o vmlinux可以看出,vmlinux 是由 HEAD、main.o、version.o、CORE_FILES、DRIVERS、NETWORKS 和 LIBS 组成的。这些变量(如 HEAD)都是用来定义连接生成 vmlinux 的目标文件和库文件列表。其中,HEAD在arch/*/Makefile 中定义,用来确定被最先链接进 vmlinux 的文件列表。比如,对于 ARM 系列的 CPU,HEAD 定义为: HEAD := arch/arm/kernel/head-$(PROCESSOR).o arch/arm/kernel/init_task.o表明 head-$(PROCESSOR).o 和 init_task.o 需要最先被链接到 vmlinux 中。PROCESSOR 为 armv 或 armo,取决于目标 CPU。 CORE_FILES,NETWORK,DRIVERS 和 LIBS 在顶层 Makefile 中定义,并且由 arch/*/Makefile 根据需要进行扩充。 CORE_FILES 对应着内核的核心文件,有 kernel/kernel.o,mm/mm.o,fs/fs.o,ipc/ipc.o,可以看出,这些是组成内核最为重要的文件。同时,arch/arm/Makefile 对 CORE_FILES 进行了扩充:# arch/arm/Makefile# If we have a machine-specific directory, then include it in the build.MACHDIR := arch/arm/mach-$(MACHINE)ifeq ($(MACHDIR),$(wildcard $(MACHDIR)))SUBDIRS += $(MACHDIR)CORE_FILES := $(MACHDIR)/$(MACHINE).o $(CORE_FILES)endifHEAD := arch/arm/kernel/head-$(PROCESSOR).o arch/arm/kernel/init_task.oSUBDIRS += arch/arm/kernel arch/arm/mm arch/arm/lib arch/arm/nwfpeCORE_FILES := arch/arm/kernel/kernel.o arch/arm/mm/mm.o $(CORE_FILES)LIBS := arch/arm/lib/lib.a $(LIBS)5) 编译信息:CPP, CC, AS, LD, AR,CFLAGS,LINKFLAGS在 Rules.make 中定义的是编译的通用规则,具体到特定的场合,需要明确给出编译环境,编译环境就是在以上的变量中定义的。针对交叉编译的要求,定义了 CROSS_COMPILE。比如:CROSS_COMPILE = arm-linux-CC = $(CROSS_COMPILE)gccLD = $(CROSS_COMPILE)ld......CROSS_COMPILE 定义了交叉编译器前缀 arm-linux-,表明所有的交叉编译工具都是以 arm-linux- 开头的,所以在各个交叉编译器工具之前,都加入了 $(CROSS_COMPILE),以组成一个完整的交叉编译工具文件名,比如 arm-linux-gcc。CFLAGS 定义了传递给 C 编译器的参数。LINKFLAGS 是链接生成 vmlinux 时,由链接器使用的参数。LINKFLAGS 在 arm/*/Makefile 中定义,比如:# arch/arm/MakefileLINKFLAGS :=-p -X -T arch/arm/vmlinux.lds6) 配置变量CONFIG_*.config 文件中有许多的配置变量等式,用来说明用户配置的结果。例如 CONFIG_MODULES=y 表明用户选择了 Linux 内核的模块功能。.config 被顶层 Makefile 包含后,就形成许多的配置变量,每个配置变量具有确定的值:y 表示本编译选项对应的内核代码被静态编译进 Linux 内核;m 表示本编译选项对应的内核代码被编译成模块;n 表示不选择此编译选项;如果根本就没有选择,那么配置变量的值为空。2.3 Rules.make 变量前面讲过,Rules.make 是编译规则文件,所有的 Makefile 中都会包括 Rules.make。Rules.make 文件定义了许多变量,最为重要是那些编译、链接列表变量。O_OBJS,L_OBJS,OX_OBJS,LX_OBJS:本目录下需要编译进 Linux 内核 vmlinux 的目标文件列表,其中 OX_OBJS 和 LX_OBJS 中的 "X" 表明目标文件使用了 EXPORT_SYMBOL 输出符号。M_OBJS,MX_OBJS:本目录下需要被编译成可装载模块的目标文件列表。同样,MX_OBJS 中的 "X" 表明目标文件使用了 EXPORT_SYMBOL 输出符号。O_TARGET,L_TARGET:每个子目录下都有一个 O_TARGET 或 L_TARGET,Rules.make 首先从源代码编译生成 O_OBJS 和 OX_OBJS 中所有的目标文件,然后使用 $(LD) -r 把它们链接成一个 O_TARGET 或 L_TARGET。O_TARGET 以 .o 结尾,而 L_TARGET 以 .a 结尾。

并不是这个 -c 是编译加的,而是整个gcc -c -o mycrp.o mycrp.c
都是Makefile自动推导出来的。

你的程序要生成test,make工具就要找test由哪几个文件生成,你写的是${OBJS} ${LIBS}
,也就是说make会先去生成mycrp.o。
但是mycrp.o怎么生成呢?你的Makefile中并没有写,make工具在当前目录下看到了mycrp.c,所以make工具自己猜测你想从mycrp.c生成mycrp.o,那怎么生成mycrp.o你没写,它就用猜测你想用gcc -c -o mycrp.o mycrp.c命令生成。

你把你的OBJS变量的值改成mycrp.c就可以解决。
不过最好的方法还是让OBJS=mycrp.o
然后加上:
%.o : %.c
$(CC) ${LFLAGS} -c $<


LT32710花屏求助,
花屏一般是逻辑板和屏的问题,还有屏线接触不良也会出现这种故障。逻辑板一般都是代换很难修复

高速公路上发生交通事故需要求助拨打12122
在高速行驶过程中,遇到紧急情况时,请务必第一时间拨打<!--紧急求助电话。在黑龙江省,高速公路的24小时服务热线是0451-12122<!--,专为交通事故和突发状况提供支持。对于市区或其他道路的事故,可拨打122<!--报警。切记,安全至上,保持冷静,迅速寻求专业援助。高速公路事故往往源于超速、疲劳驾驶或违规...

求助的文言文
2. 【求助】文言文原文 诗词标题:观刈麦 诗词作者:白居易 年代:唐 诗词内容: 田家少闲月,五月人倍忙。 夜来南风起,小麦覆陇黄。妇姑荷箪食,童稚携壶浆。 相随饷田去,丁壮在南冈。足蒸暑土气,背灼炎天光。 力尽不知热,但惜夏日长。复有贫妇人,抱子在背傍。 右手秉遗穗,左臂悬敝筐。听其相顾言,闻者为...

求助,LT26I有些文件放不进手机,视频,电子书都放不进手机,说是此设备不...
不支持是指手机自带的软件不支持这两种格式。并不是这些格式的文件被禁止拷入手机里。你不用理会它的提示。直接把这些电子书和视频拷入手机或者拷入手机所用的存储卡里面。然后使用360手机助手,或者豌豆荚,91助手之类的软件。连接手机和电脑。搜索安装MX player播放器和对应解码器(你的手机所需要的解码...

求助>lt;大图书馆的牧羊人dreaming sheep不能启动
您好,很高兴为您解答问题。用app开硬盘上安装目录里的游戏程序。如果对回答满意,请点【采纳答案】,如果还有问题,请点【追问】希望我的回答对您有所帮助,希望能采纳。~ O(∩_∩)O~

lt;长沙交通gt;lt;旅客求助gt;请问武广铁路长沙站去 岳麓区银杉广场、怎...
武广长沙南站,顾名思义,在长沙南边,具体位置是雨花区新花侯路。交通方便,公交车很多。火车南站到银杉广场可以坐348路,途中有20多站,要跑20分钟吧。在银盆岭大桥西下车(过了湘江大桥就下车),然后打个的士到银杉广场,1公里不到,3块钱。走路也不远,下公交一直走到转盘,右转到银杉路,再直...

手机紧急求助按键
< 手机紧急求助按键手机受到了众人的认可,对于大众来说,他们能做到机不离手。毕竟手机拥有众多功效,而出现突发状况时,我们可以利用手机紧急求助。一般手机紧急求助按键就是安全界面中的SOS紧急求助。手机紧急情况快捷按键 手机受到了众人的认可,对于大众来说,他们能做到机不离手。毕竟手机拥有众多功效,...

lT民工装饰网求助电工桥架各种弯头制作图解法
对弯头尺寸的计算公式这个话题有着自己独道的见解,下面经验之谈,希望大家多多学习。1、1.5倍弯头中心高=通径*1.524,其实就是通径*倍数,将得出的结果的小数点后面的数字四舍五入取整数,如219的通径是200,中心高即为200*1.524=304.8,取305;又如114的通径为100,中心高即为100*1.524=152.4,取...

求助:LT37710每天上午开机正常,下午开机花屏;有声音!
你应该查查一下电源是否正常,因为每天上午是好的。下午不正常,应该是电压低的问题,。

求助长虹LT3712花屏
①、向这故障首先测量一下,逻辑板电路供电电压是否正常。②、若逻辑板电路供电电压正常的话,那就在测量一下逻辑板上的所有,DC一DC电压变换电路芯片,各输出端引脚对地电压是否正常,如果均正常的话,这故障就是逻辑板上的主控制芯片损坏。

迎江区18465576166: <求助>电脑老是蓝屏 -
彘珠祖师: 如果要解决这个问题,您可以获得一份新的毁损档案,或是重新安装 Windows.如果重新安装 Windows 后仍然出现本文〈摘要〉一节中描述的错误讯息,这可能是硬体或网路的问题. ※注意※一般有这几个问题会出现这种情况: 1、内存质量...

迎江区18465576166: excel中if函数公式求助
彘珠祖师: 如果是负数就返回0,应加一个条件才行,公式改为: =IF(C6*120+D6*144-C2&lt;0,0,IF(AND(C6*120+D6*144-C2&gt;0,C6*120+D6*144-C2&lt;=C2*0.1),(C6*120+D6*144-C2)*0.1,C2*0.1))

迎江区18465576166: <新手求助>请问后期编辑如何插入音乐 -
彘珠祖师: 进入第二步后点添加Media,然后再选择要添加的音乐即可.

迎江区18465576166: &lt;求助&gt;关于手机吉他solo所对应的乐符 -
彘珠祖师: 这是音乐中的和声学,简单点说就是三和旋,由三个单音组成的.比如C和旋就是135.具体在哪根弦上你就自己研究吧.我就不多讲了.C:135 Dm:246 Em:357 F:461 G:572 Am:613 以上这些是C大调的六个基本和旋.不过说实话,用SOLO软件想弹主音估计不太现实,即使你的手能反映过来,我觉得机器也反映不过来.建议你还是换个软件吧.

迎江区18465576166: &lt;求助&gt; 太阁立志传5 金手指问题 -
彘珠祖师: 就是按L1+L2打开效果,R1+R2关闭效果.

迎江区18465576166: <求助!>具体怎样连接无线网?????? -
彘珠祖师: 点“设置”——开“WLAN"——然后点击”WLAN“进去,你会看到可连接的无线热点的!

迎江区18465576166: <求助>发帖子时怎样把图片设成封面?(已解决,谢谢) -
彘珠祖师: 先把图片用附件形式上传,再如二楼的办法就OK 了

迎江区18465576166: 求助 <爱国者>LC - F725液晶显示器故障 -
彘珠祖师: 高压板板上有焦斑,想代换高压板.查8针接口分别是:1脚(黑线)其余都是白线.1脚和2脚,分不清开关、亮度.3脚.是空脚.4脚和8脚是5V.5脚3.3V.6脚13.5V.7脚接地. 请教师傅指出1脚和2脚哪个是开关、亮度. 灯管换高压板后,再代换.

迎江区18465576166: <求助>索尼F25MF1开机就保护 -
彘珠祖师: 该机故障一般都出在三端稳压器接出不良,将其焊接好就好

迎江区18465576166: C语言编程!急求
彘珠祖师: #include&lt;stdio.h&gt; #define N 20 void main() { int intarray[N]; int i,sum=0,max=0; double average=0; printf("输入20个整数:\n"); for(i=0;i&lt;N;i++) { scanf("%d",&amp;intarray[i]); sum=sum+intarray[i]; if(max&lt;intarray[i]) max=intarray[i]; } ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网